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));
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容