是否可以将FragmentActivity中的值传递给Fragment

时间:2013-12-30 06:50:28

标签: android android-fragments

是否可以将值从FragmentActivity {}传递到Fragment {}

在我的应用程序中实现了导航抽屉,问题是我在抽屉菜单中有类别。现在我想将公共类的类别ID传递给MainActivity extends FragmentActivity {}到公共类Galleries extends Fragment {}。感谢很少的帮助 已编辑: 伙计们看到下面的链接,我在那里发布了我的代码。告诉我如何将 MainActivity 中的 OnclickListener 的Int pos值传递给片段类库https://www.dropbox.com/s/pmcdjb3yorvp54w/MainActivity.txt https://www.dropbox.com/s/ivkc15bqz4vp8c5/fragment%20class.txt

3 个答案:

答案 0 :(得分:1)

我刚修好它。实际上不需要Galleries片段中的构造函数。我删除了构造函数,只是通过以下代码接收了值 int throwid = getArguments()。getInt(“ID”); Log.d( “BUNDLE == NULL”,将String.valueOf(throwid)); 通过以下值传递: public void onItemClick(AdapterView parent,View view,final int pos,final long id){

             final Galleries pass= new Galleries();
              Bundle args = new Bundle();
              args.putInt("ID", pos);
              pass.setArguments(args);
          if (pass!=null){ 
             Log.d("bundle","has value");
           }

                    drawer.setDrawerListener( new DrawerLayout.SimpleDrawerListener(){
                             @Override 
                             public void onDrawerClosed(View drawerView){
                                     super.onDrawerClosed(drawerView);

                                     //FragmentTransaction tx = getSupportFragmentManager().beginTransaction();
                                     //tx.replace(R.id.main,Fragment.instantiate(MainActivity.this, fragments[0]));
                                     FragmentTransaction tx = getSupportFragmentManager().beginTransaction(); tx.replace(R.id.main, pass); tx.commit();

答案 1 :(得分:0)

FragmentActivity,您可以将数据发送到Fragment,意图为:

FragmentTransaction ftran = context.getFragmentManager().beginTransaction();
Bundle bundle=new Bundle();
bundle.putInt("Id", <your id here>);
Galleries fragobj=new Galleries ();
fragobj.setArguments(bundle);
ftran.replace(R.id.firstpage, R.id.galleryfragmentPage); 
ftran.commit();

并获取下一个片段的ID:

Bundle bundle = this.getArguments();
int myID = bundle.getInt("Id", 0);

我不知道你有什么逻辑。 试试如下:

   FragmentTransaction tx = getSupportFragmentManager().beginTransaction(); 
    Bundle bundle = new Bundle();
    String check="checking...";
bundle.putString("id_cat", check);
Galleries obj =new Galleries();
     obj.setArguments(bundle);
    Log.d("BUNDLE", bundle.toString());
    tx.replace(R.id.main, obj);
tx.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                                    // int position =5;
tx.commit();

答案 2 :(得分:0)

除了在Intent Bundle中传递数据外,还有一种方法可以直接访问Fragment。

在FragmentActivity中,您使用FragmentManager添加片段。

您还可以使用FragmentManager获取Fragment(使用findById())。获取它并将其转换为您的类名后,您可以轻松地在Fragment中调用公共方法。

示例:

FragmentManager fm = getSupportFragmentManager();
MyFragment fragment = (MyFragment) fm.findFragmentById(R.id.fragmentContainer);

fragment.updateData(..);

修改

要从传递的意图中获取数据,请执行以下操作:

Intent in = getActivity().getIntent();
String str = in.getStringExtra(EXTRA_STRING_DATA);

getArguments()用于附加到Fragment的Bundle,而不是Intent中传递的Bundle。

EDIT2

您无法按照自己的方式创建片段。

在您的活动中执行以下操作:

FragmentTransaction tx = getSupportFragmentManager().beginTransaction();

// int position =5;
String check="checking...";
Galleries fragment = Galleries,newInstance(check);
tx.replace(R.id.main, Fragment.instantiate(MainActivity.this, fragment));
tx.commit();

在图库中创建静态方法:

public static Fragment newInstance(String check) {
    Bundle args = new Bundle();
    args.putString("id_cat", check);
    Galleries fragment = new Galleries();
    fragment.setArguments(args);
    return fragment;
}

现在你可以在onCreateView()中执行getArguments()。