参见英文答案 > Communicating between a fragment and an activity – best practices 9个
我需要将数据从活动传递到片段.我知道我可以使用bundle,但是一旦我传递数据,我就无法在不调用和再次创建片段的情况下发送数据.
在我的活动中,有些东西可能会被更改,我需要通知我的片段这些更改而不重新创建片段.
解决方法:
在Activity中创建一个接口,并通过接口将数据传递给片段.在片段中实现该接口以获取数据.
例如
MainActivity.class
public class MainActivity extends AppCompatActivity { DataFromActivityToFragment dataFromActivityToFragment; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); FragmentA fr = new FragmentA(); FragmentManager fm = getFragmentManager(); dataFromActivityToFragment = (DataFromActivityToFragment) fr; FragmentTransaction fragmentTransaction = fm.beginTransaction(); fragmentTransaction.replace(R.ID.fragment_place, fr); fragmentTransaction.commit(); final Handler handler = new Handler(); final Runnable r = new Runnable() { public voID run() { dataFromActivityToFragment.sendData("Hi"); } }; handler.postDelayed(r, 5000); } public interface DataFromActivityToFragment { voID sendData(String data); }}
FragmentA.class
public class FragmentA extends Fragment implements MainActivity.DataFromActivityToFragment { TextVIEw text; @Nullable @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) { VIEw rootVIEw = inflater.inflate(R.layout.content_main, null); text = (TextVIEw) rootVIEw.findVIEwByID(R.ID.fragment_text); return rootVIEw; } @OverrIDe public voID onVIEwCreated(VIEw vIEw, Bundle savedInstanceState) { super.onVIEwCreated(vIEw, savedInstanceState); } @OverrIDe public voID sendData(String data) { if(data != null) text.setText(data); }}
activity_main.xml中
<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:orIEntation="vertical" > <linearLayout androID:ID="@+ID/fragment_place" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:orIEntation="horizontal"> </linearLayout></linearLayout>
content_main.xml
<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent"> <TextVIEw androID:ID="@+ID/fragment_text" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" /></linearLayout>
在上面的例子中,我已经将Runnable用于在创建片段后延迟5秒发送数据.
总结以上是内存溢出为你收集整理的Android – 如何将数据从活动传递到片段?全部内容,希望文章能够帮你解决Android – 如何将数据从活动传递到片段?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)