Activity&&Fragment之间传值

github地址

https://github.com/zhouxu88/Activity_Fragment_Data.git

一、Activity向Fragment传递数据(2种方式)

1、setArgument和getArgument传递数据
只适用于Fragment创建的时候,从Activity给Frament传递数据

关键代码
Activity:

//向Fragment传递的数据
TestFragment fragment = new TestFragment();
Bundle bundle = new Bundle();
bundle.putString("key_data","Activity传递的初始化数据");
fragment.setArguments(bundle);

Fragment:

//初始化Fragment的数据
private void initData() {    
    String data = getArguments().getString("key_data");    
    if(!TextUtils.isEmpty(data)){      
          resultTv.setText(data); //设置Fragment的数据       
          Log.i("tag","data----------->"+data); 
      }
  }

2、在Fragment创建成功后,Activity通知Fragment做某些实现*
通过FragmentManager找到Fragment实例,然后Fragment实例调用相应方法

Activity:

TestFragment testFragment = (TestFragment) fragmentManager.findFragmentByTag("TestFragment");
testFragment.update(count); //调用Fragment的方法传递数据

Fragment:

//供activity调用的方法,用于更新UI
public void update(int number){    
    resultTv.setText(String.valueOf(number));
}

二、Fragment向Activity传递数据:(2种方式)

1、在Fragment中通过getActivity()获取Activity实例,调用Activity的方法(不推荐,耦合性强)

MainActivity mainActivity = (MainActivity) getActivity();
mainActivity.reduce(count); //调用Activity的方法,向Activity传递数据

2、接口回调(推荐使用)

交互的接口:

public interface IReduceListener {
    void update(int count);
}

Fragment:

private IReduceListener listener;

//向activity传递数据
listener.reduce(count);

//供activity调用的方法
public void setIReduceListener(IReduceListener listener){   
     this.listener = listener;
}

Activity:

public class MainActivity extends AppCompatActivity implements IReduceListener{

      TestFragment fragment = new TestFragment();
      fragment.setIReduceListener(this); //把接口对象传递给Fragment

      //Fragment回传的数据的回调的方法
      @Override
      public void reduce(int count) {    
      //设置回传的数据   
      resultTv.setText(String.valueOf(count));
    }
}

你可能感兴趣的:(Activity&&Fragment之间传值)