【问题标题】:Change number of buttons in Fragment on Tab click在选项卡单击时更改片段中的按钮数
【发布时间】:2014-05-23 11:50:42
【问题描述】:

我以编程方式创建了 10 个选项卡,并希望在用户单击选项卡时更改放置在片段中的按钮数量。

我的“MainActivity”代码:

public class MainActivity extends Activity {
int numberOfButtons=0;
@Override
  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FragmentA fragmentA = new FragmentA();
        FragmentManager manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.add(R.id.mainLayout,fragmentA,"fragA");
        transaction.commit();
        ActionBar  actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        for (int i=0;i<10;i++)
        {
            ActionBar.Tab tab = actionBar.newTab().setText("Tab"+i).setTabListener(new ActionBar.TabListener() {
                @Override
                public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
                    numberOfButtons = 10;
                    sendNumber(numberOfButtons);

                }

                @Override
                public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {

                }

                @Override
                public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {

                }
            });

            actionBar.addTab(tab);
     }
}

这是我的片段代码:

public class FragmentA extends Fragment implements View.OnClickListener{

Button btn;
View myView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    int numberOfButtons= getArguments().getInt("someInt",0);
    LinearLayout view =  new LinearLayout(getActivity());
    // Inflate the layout for this fragment
    view.setOrientation(LinearLayout.VERTICAL);
    view.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
    for (int i = 0;i<numberOfButtons;i++)
    {
        btn = new Button(getActivity());
        view.addView(new Button(getActivity()));
    }
    myView = view;
    return myView;
}


@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}
@Override
public void onClick(View v) {

}

}

我在 MainActivity 中调用 numbeOfButtons 方法,并希望在单击选项卡时将按钮数量发送到 Fragment。然而,应用程序在调用fA.numberOfBtns(numberOfButtons); 行后抛出错误。错误是 reflect.InvocationTargetException。

点击标签时如何更改 Fragment 中的按钮数量?

【问题讨论】:

    标签: android android-layout android-fragments android-studio


    【解决方案1】:

    您可能希望在Fragment 初始化期间使用newInstance 技术来传递参数。这是取自here的一个小例子:

    public static MyFragment newInstance(int someInt) {
        MyFragment myFragment = new MyFragment();
    
        Bundle args = new Bundle();
        args.putInt("someInt", someInt);
        myFragment.setArguments(args);
    
        return myFragment;
    }
    

    以后你可以访问这个参数:

    getArguments().getInt("someInt", 0);
    

    【讨论】:

    • 感谢您的回答。 newInstance 技术将参数传递给 Fragment 并调用 Fragment 的onCreateView。但是,在旧按钮上添加了新按钮。如何在标签点击时重置fargment的布局?
    • @Blast 发布完整堆栈跟踪
    • @Blast 我没有看到堆栈跟踪
    • 很抱歉回复晚了。我无法在 android studio 中访问堆栈跟踪。我有一些问题:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2011-11-02
    • 2017-01-06
    • 2018-02-18
    • 1970-01-01
    相关资源
    最近更新 更多