簡體   English   中英

在 Viewpager Tablayout 中將數據從 Activity 傳遞到 Fragment

[英]Pass Data from Activity to Fragment in Viewpager Tablayout

我使用下面的代碼將數據從 Activity 傳遞到 Fragment。

片段代碼

public class StoryDetailFragmentInfo extends Fragment {
View view;
TextView txtDescrible;

final static String getData = "abc";

public static StoryDetailFragmentInfo newInstance(String paramater){
    Bundle bundle = new Bundle();
    bundle.putString(getData,"Message");
    StoryDetailFragmentInfo fragmentInfo = new StoryDetailFragmentInfo();
    fragmentInfo.setArguments(bundle);
    return fragmentInfo;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(getArguments()!=null){
        String test = getArguments().getString(getData);
    }



}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    view = inflater.inflate(R.layout.story_detail_fragment_info_layout, container, false);

     txtDescrible = view.findViewById(R.id.txt_describleDetail);

    return view;
}

}

主要活動代碼

   @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.story_detail_layout);
    addControls();
    loadData();
    intentData();
    fillDataToView();
}

private void intentData() {
    StoryDetailFragmentInfo.newInstance("Hello babe");

}

問題是我的片段中的getArgument()null ,我無法獲取數據我該怎么辦?
你能幫我解釋一下嗎? 謝謝閱讀。

  1. 如果要將數據從活動傳遞到片段作為初始數據,可以將數據從活動發送到 ViewPagerAdapter,然后在 getItem() 函數中將數據從 ViewPagerAdapter 傳遞到片段。 在活動中:

    adapter = new ViewPagerAdapter(getSupportFragmentManager(), this,false)); 適配器.setData(數據);

在 ViewPagerAdapter 中:

    @Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            MyFragment fragment = new MyFragment();
            fragment.setData(data);
            return fragment
    }
}
  1. 如果您想將數據從活動實時傳遞到片段(例如更新數據),我建議使用 EventBus。 它是一種現代便捷的工具,用於在 Activity 和 Fragment 之間進行通信。 https://github.com/greenrobot/EventBus檢查

首先,在類StoryDetailFragmentInfo newInstance方法中,你寫這些: bundle.putString(getData,"Message"); 而不要管paramater 所以你需要改變

 bundle.putString(getData,"Message"); 

 bundle.putString(getData,paramater);

其次,您嘗試通過鍵“AdapterStoryDe​​tailViewPager.idData”從片段的參數中獲取值,但此鍵與您用於保存值的鍵不同。 所以你需要改變

String test = getArguments().getString(AdapterStoryDetailViewPager.idData);

String test = getArguments().getString(getData);

經過這兩個步驟,您將獲得正確的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM