zoukankan      html  css  js  c++  java
  • 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) {
    //定义bundle,通过bundle传递数据
    13 Bundle bundle= new Bundle(); 14 String text= editText.getText()+""; 15 bundle.putString("key",text); 16 Fragment1 fragment1= new Fragment1(); 17 fragment1.setArguments(bundle);
    //fragment的动态加载办法
    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
    //调用Fragment的Mylistener监听器中的sendtext方法来实现接收数据
    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;
    //Acitivity要实现这个接口,这样Fragment和Activity就可以共享事件触发的资源了
    4 public interface Mylistener{ 5 public void sendtext(String w); 6 } 7 //调用Onattach方法得到上下文 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);
    //通过getArguments得到从Activity回传过来的数据
    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();
    //通过接口将code传送给Activity,接口已经通过onAttach方法得到Activity的对象
    21 mylistener.sendtext(code); 22 return view; 23 24 } 25 26 }
  • 相关阅读:
    HDU 6076
    HDU 6069
    ZOJ
    HDU
    斜率优化dp
    UVA 11752 The Super Powers
    poj 3761 bubble sort (排列组合)
    UVA 11174 Stand in a Line
    Caffe初学者第二部:Ubuntu16.04上安装caffe(CPU)+Matlab2014a+Opencv3的详细过程 (亲测成功, 20180529更新)
    Caffe初学者第一部:Ubuntu14.04上安装caffe(CPU)+Python的详细过程 (亲测成功, 20180524更新)
  • 原文地址:https://www.cnblogs.com/edwardru/p/5855878.html
Copyright © 2011-2022 走看看