[英]How to pass data from an activity to a fragment on android
我有一个名为“家庭”的活动; 登录后,我被重定向到此活动。 此活动以这种方式实现了两个片段(页眉和页脚)。
View header = inflater.inflate(R.layout.fragment_header_fragement, null);
View footer = inflater.inflate(R.layout.fragment_footer, null);
mDrawerListView.addHeaderView(header);
mDrawerListView.addFooterView(footer);
我想主要显示在实现到“ Home”活动中的标头片段中,这些数据是从日志记录活动中传输的。 我搜索了一下这个问题,发现我们只能在主要活动中添加或替换一个片段,而不能在另一个片段中添加或替换一个片段。 我试图资助解决方案,但还没有。 这是我的代码:
@Override
protected void onPostExecute(final String res) {
//LoginTask = null;
//showProgress(false);
try {
jObj = new JSONObject(res);
} catch (JSONException e) {
e.printStackTrace();
}
try {
if (jObj.getString("code").equals("1")) {
infos = new Bundle();
infos.putString("ID",jObj.getString("ID"));
infos.putString("Name",jObj.getString("display_name"));
infos.putString("ImgUrl","http://unchained-network.com/uploads/profilpics/53f5c570b6ac2.png");
android.support.v4.app.FragmentTransaction tr = getSupportFragmentManager().beginTransaction();
HeaderFragement hf = new HeaderFragement();
//Charger les infos dans l'activité
hf.setArguments(infos);
tr.add(R.id.frgmnt,hf);
tr.commit();
Intent myIntent = new Intent(getActivity(), HomesActivity.class);
//Lançer l'activité
startActivityForResult(myIntent, 0);
} else {
//password.setError(getString(R.string.error_incorrect_password));
//password.requestFocus();
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Error !");
builder.setMessage("The information entered is incorrect.\nPlease try again!")
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
这就是我将数据提取到片段中的方式
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
name = (TextView) getView().findViewById(R.id.nameH);
img = (ImageView) getView().findViewById(R.id.imageViewHeader);
Bundle infos = getArguments();
name.setText(infos.getString("Name"));
img.setImageBitmap(getBitmapFromURL(infos.getString("ImgUrl")));
}
因此,请采取任何解决方案。 谢谢
您为什么不仅仅通过意图传递数据? 您有两个活动Login
和Home
。
Intent myIntent = new Intent(getActivity(), HomesActivity.class);
//Lançer l'activité
startActivityForResult(myIntent, 0);
在上面的代码中,您可以像这样简单地添加额外的信息
myIntent.putExtra("name", "value");
然后您可以在“家庭活动”中检索此内容
String extra = i.getStringExtra("name");
然后将这些额外的内容传递给您的标头片段。
将变量传递给Fragment的代码没有任何问题。 我刚刚复制了您的代码,效果很好。
活动:
Bundle infos = new Bundle();
infos.putString("ID", "1");
infos.putString("Name", "Gonzo");
FragmentMain frag = new FragmentMain();
frag.setArguments(infos);
分段:
Bundle infos = getArguments();
Log.i(getTag(), infos.getString("Name"));
我建议您将一些日志记录放入onPostExecute中,或逐步进入调试模式。 确保您的json返回了您期望的结果。
作为一般建议,infos.getString接受两个参数,第二个是默认值,可能有用。 还要避免使用硬编码键,例如“名称”,而要使用公共静态字符串并引用它。
祝好运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.