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