是否可以将值从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
答案 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。
您无法按照自己的方式创建片段。
在您的活动中执行以下操作:
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()。