Fragment与Activity的互相通讯

Posted EdwardRu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fragment与Activity的互相通讯相关的知识,希望对你有一定的参考价值。

注意:在SDK 23以上的API中,Fragment的onAttach(Activity activity) is deprecated(过时了),取而代之的是onAttach(Context context),然而新的onAttach方法在API小于23的设备上运行,会出现不被调用的情况。


解决办法:
API小于19的设备上,用import android.support.v4.Fragment代替android.app.Fragment

*******************************

在慕课网学习到Fragment和Activity的通讯

习惯使用Fragment动态的加载办法,所以没有加上静态加载的办法。

当时在调用Onattach方法的时候自动调用的onattach(Context context)当在执行的时候报错Null pointer,后来改成Activity activity后就没有报错了,解决办法是用android.support.v4.Fragment包代替android.app.Fragment包

Activity的代码

 1 public class MainActivity extends AppCompatActivity implements Fragment1.Mylistener{
 2     private EditText editText;
 3     private Button button;
 4     @Override
 5     protected void onCreate(Bundle savedInstanceState) {
 6         super.onCreate(savedInstanceState);
 7         setContentView(R.layout.activity_main);
 8         editText=(EditText)findViewById(R.id.edit_text);
 9         button=(Button)findViewById(R.id.button);
10         button.setOnClickListener(new View.OnClickListener() {
11             @Override
12             public void onClick(View view) {
13                 Bundle bundle= new Bundle();
14                 String text= editText.getText()+"";
15                 bundle.putString("key",text);
16                 Fragment1 fragment1= new Fragment1();
17                 fragment1.setArguments(bundle);
18                 FragmentManager fragmentManager= getFragmentManager();
19                 FragmentTransaction fragmentTransaction= fragmentManager.beginTransaction();
20                 fragmentTransaction.add(R.id.frame,fragment1,"fragment1");
21                 fragmentTransaction.commit();
22                 Toast.makeText(MainActivity.this,"已接受text:"+text,Toast.LENGTH_SHORT).show();
23             }
24         });
25     }
26     @Override
27     public void sendtext(String w) {
28         Toast.makeText(MainActivity.this,"Received"+w,Toast.LENGTH_SHORT).show();
29     }
30 }

Fragment的代码

 1 public class Fragment1 extends Fragment{
 2     public String code="Thanks";
 3     public Mylistener mylistener;
 4     public interface Mylistener{
 5         public void sendtext(String w);
 6     }
 7 
 8     @Override
 9     public void onAttach(Context context) {
10         mylistener=(Mylistener)context;
11         super.onAttach(context);
12     }
13 
14     @Nullable
15     @Override
16     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
17         View view=inflater.inflate(R.layout.fragment,container,false);
18         String text=getArguments().get("key")+"";
19         Toast.makeText(getActivity(),"已成功接收到"+text,Toast.LENGTH_SHORT).show();
20         Toast.makeText(getActivity(),"sendMessageToActivity"+code,Toast.LENGTH_SHORT).show();
21         mylistener.sendtext(code);
22         return view;
23 
24     }
25 
26 }

 

以上是关于Fragment与Activity的互相通讯的主要内容,如果未能解决你的问题,请参考以下文章

Android的Fragment中的互相通信-桥梁activity

操作栏和导航抽屉 - 使用 Activity/Fragment 滑动操作栏

关于Activity和Fragment生命周期的问题

Activity与Fragment的生命周期

Fragment基础----信息传递

EventBus组件间通讯利器入门篇