我有一个Activity用的Fragment.我只是想将一个对象传递Activity给它Fragment.
我怎么能这样做?到目前为止我见过的所有教程都是从资源中检索数据的.
编辑:
让我们更精确一点:
我的活动ListView在左侧部分有一个.单击它时,想法是Fragment在右侧部分加载.
当我输入这个时Activity,一个对象Category通过Intent.此对象包含其他对象的列表Questions(包含字符串列表).这些Questions对象显示在ListView上.当我点击其中的一个项目时ListView,我想将列表显示String到Fragment(进入a ListView)中.
要做到这一点,setContentView()我Activity用布局调用我的.在此布局中定义了Fragment要调用的正确类.当我调用它时setContentView(),调用onCreateView()my Fragment,但此时getArguments()返回null.
我怎么能设法在电话会议之前填写onCreateView()?(告诉我,如果我不够清楚)
谢谢
Mac*_*rse 126
在中创建静态方法Fragment,然后使用它getArguments().
例:
public class CommentsFragment extends Fragment {
private static final String DESCRIBABLE_KEY = "describable_key";
private Describable mDescribable;
public static CommentsFragment newInstance(Describable describable) {
CommentsFragment fragment = new CommentsFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(DESCRIBABLE_KEY, describable);
fragment.setArguments(bundle);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
mDescribable = (Describable) getArguments().getSerializable(
DESCRIBABLE_KEY);
// The rest of your code
}
Run Code Online (Sandbox Code Playgroud)
之后您可以通过Activity执行以下操作来调用它:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
Fragment fragment = CommentsFragment.newInstance(mDescribable);
ft.replace(R.id.comments_fragment, fragment);
ft.commit();
Run Code Online (Sandbox Code Playgroud)
dym*_*meh 11
您应该在片段中创建一个方法,该方法接受您希望传递给它的对象类型.在这种情况下,我将其命名为"setObject"(创意吧?:))然后,该方法可以执行该对象所需的任何操作.
MyFragment fragment;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) {
fragment = new MyFragment();
getSupportFragmentManager().beginTransaction().add(android.R.id.content, detailsFragment)
.commit();
} else {
fragment = (MyFragment) getSupportFragmentManager().findFragmentById(
android.R.id.content);
}
fragment.setObject(yourObject); //create a method like this in your class "MyFragment"
}
Run Code Online (Sandbox Code Playgroud)
请注意,我正在使用支持库,并且根据您正在使用的内容,对getSupportFragmentManager()的调用可能只是getFragmentManager()
小智 11
在您的活动类中:
public class BasicActivity extends Activity {
private ComplexObject co;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_page);
co=new ComplexObject();
getIntent().putExtra("complexObject", co);
FragmentManager fragmentManager = getFragmentManager();
Fragment1 f1 = new Fragment1();
fragmentManager.beginTransaction()
.replace(R.id.frameLayout, f1).commit();
}
Run Code Online (Sandbox Code Playgroud)
注意:您的对象应该实现Serializable接口
然后在你的片段中:
public class Fragment1 extends Fragment {
ComplexObject co;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Intent i = getActivity().getIntent();
co = (ComplexObject) i.getSerializableExtra("complexObject");
View view = inflater.inflate(R.layout.test_page, container, false);
TextView textView = (TextView) view.findViewById(R.id.DENEME);
textView.setText(co.getName());
return view;
}
}
Run Code Online (Sandbox Code Playgroud)
从下面的例子中可以得到参考。
1. 在片段中:为您想要在片段中包含其对象的类创建一个引用变量。只需为引用变量创建一个 setter 方法,并在从活动中替换片段之前调用该 setter 即可。
MyEmployee myEmp;
public void setEmployee(MyEmployee myEmp)
{
this.myEmp = myEmp;
}
Run Code Online (Sandbox Code Playgroud)
2. 活动中:
//we need to pass object myEmp to fragment myFragment
MyEmployee myEmp = new MyEmployee();
MyFragment myFragment = new MyFragment();
myFragment.setEmployee(myEmp);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.main_layout, myFragment);
ft.commit();
Run Code Online (Sandbox Code Playgroud)
通过捆绑传递参数仅限于某些数据类型。但是您可以通过这种方式将任何数据传输到您的片段:
在您的片段中创建一个像这样的公共方法
public void passData(Context context, List<LexItem> list, int pos) {
mContext = context;
mLexItemList = list;
mIndex = pos;
}
Run Code Online (Sandbox Code Playgroud)
并在实例化片段后在您的活动中使用所有需要的数据类型调用 passData()
WebViewFragment myFragment = new WebViewFragment();
myFragment.passData(getApplicationContext(), mLexItemList, index);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.my_fragment_container, myFragment);
ft.addToBackStack(null);
ft.commit();
Run Code Online (Sandbox Code Playgroud)
备注:我的片段扩展了“android.support.v4.app.Fragment”,因此我必须使用“getSupportFragmentManager()”。当然,这个原则也适用于扩展“Fragment”的片段类,但是您必须使用“getFragmentManager()”。
| 归档时间: |
|
| 查看次数: |
118902 次 |
| 最近记录: |