Android 通过回调将数据传递给片段的活动
我这里有个情况 我有一个Android 通过回调将数据传递给片段的活动,android,android-activity,android-fragments,callback,android-fragmentactivity,Android,Android Activity,Android Fragments,Callback,Android Fragmentactivity,我这里有个情况 我有一个fragmentactivity,它保存一个片段。当我点击片段中的一个按钮时,我将进入一个活动。当我到达活动时,我会做一些事情,这将影响我来自的片段中显示的数据。因此,为了在片段中进行更改,我想从活动回调到片段。首先,我想到在ActivityResult上实现。但我意识到这不是我需要的 是我的方法错了吗??请引导我 MyActivity extends FragmentActivity 我的活动有效 MyFragment extends Fragment 从这里我要去
fragmentactivity
,它保存一个片段
。当我点击片段
中的一个按钮时,我将进入一个活动
。当我到达活动时,我会做一些事情,这将影响我来自的片段中显示的数据。因此,为了在片段中进行更改,我想从活动
回调到片段
。首先,我想到在ActivityResult上实现。但我意识到这不是我需要的
是我的方法错了吗??请引导我
MyActivity extends FragmentActivity
我的活动有效
MyFragment extends Fragment
从这里我要去
SecondActivity extends Activity
从SecondActivity
我需要得到一个到MyFragment
的回调。我的方法有什么问题吗
编辑:
MyFragment.java
public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_view, container, false);
Button button = (Button) view.findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
callActivity();
}
});
return view;
}
private void callActivity() {
Intent intent = new Intent(getActivity(), SecondActivity.class);
startActivityForResult(intent, 10);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// super.onActivityResult(requestCode, resultCode, data);
Log.e("MyFragment Inside", "Onresultttt");
if (requestCode == 10) {
if (resultCode == Activity.RESULT_OK) {
Log.e("Result code", Activity.RESULT_OK + " okkk");
}
if (resultCode == Activity.RESULT_CANCELED) {
Log.e("Result code", Activity.RESULT_CANCELED + "cancelll inside fragment");
}
}
}
}
SecondActivity.java
public class SecondActivity extends Activity {
private static final String TAG = "second activity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.secondactivity_view);
}
@Override
public void onBackPressed() {
// super.onBackPressed();
Intent intent = new Intent();
setResult(RESULT_CANCELED, intent);
Log.e(TAG, "result setted");
finish();
}
}
如果我正确理解您的情况,那么处理通信的正确方法是让SecondActivity将信息传回MyActivity,MyActivity将直接配置MyFragment的实例。除非片段附加到活动,否则您不希望访问活动中的片段
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, INTENT_CODE);
至于如何进行沟通,正如您所建议的,一种方法是使用startActivityForResult()。有关更多详细信息,请参阅此答案:
只是关于startActivityForResult()的一个注释。如果您是从片段调用它,那么您的片段将接收结果,而不是您的活动。从片段调用startActivityForResult()还存在一些其他问题,因此我通常建议您改为从活动调用它,从而处理活动的结果
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, INTENT_CODE);
从片段到活动通信的最佳实践方式是在片段中定义一个接口,该接口由活动实现
public class MyFragment extends Fragment {
public interface MyFragmentListener() {
public void onMyFragmentEvent();
}
public void startTheActivityForResult() {
((MyFragmentListener)getActivity()).onMyFragmentEvent();
}
}
public class MainActivity extends FragmentActivity implements MyFragmentListener{
@Override public void onMyFragmentEvent() {
}
}
片段然后简单地将引用强制转换为它所附加到的活动,知道该活动必须实现侦听器,从而允许您在其他活动中重用片段。参考此问题,它将帮助您了解发生了什么:
使用界面处理来自的回调startActivityForResult
fragment@Raghunandan我先告诉你我是怎么想的。但我意识到我是wrong@edwin怎么了?@BaZinga我如何制作接口将数据推回到片段。我想到了。但我对实现逻辑一无所知。如果你不介意的话,你能详细说明一下吗?我试过这个。但onActivityResult在转到第二个Activity之前被触发。当返回到FragmentNothing时,ActivityResult上的链接也在FragmentActivity中实现。这是否会影响通过FragmentActivity使用的其他片段??在onActivityResult(int requestCode、int resultCode、Intent data)方法中,是否检查resultCode是否与Intent(Intent_代码)中设置的相同?可能还有其他的意图,你会希望以不同的方式处理。另外,请检查我对我的帖子所做的编辑,在创建意图时,您可能传递了对片段的引用,这可以解释为什么没有调用您的活动的onActivityResult()。因此,您建议我在FragmentActivity中处理onActivityResult。并将数据从FragmentActivity推送到我需要回调的片段。如果我错了,请纠正我。在FragmentActivity中处理意图。在FragmentActivity中,您应该有一个对片段的引用,这样您就可以直接调用它来配置它。