【问题标题】:How to pass value on Button click (Fragment 1) to onCreateView (Fragment 2)?如何将按钮单击(片段 1)上的值传递给 onCreateView(片段 2)?
【发布时间】:2015-03-04 04:46:06
【问题描述】:

我有 2 个Fragments。 当我点击Fragment 1 中的按钮时,我会在这里做什么:

  1. 我设置了变量String title = "Lady Gaga"
  2. 我会显示Fragment 2

Fragment 2 显示时,我想显示标题文本。

怎么做?

【问题讨论】:

标签: android fragment


【解决方案1】:

您可以使用捆绑包来传递数据:

            Bundle data = new Bundle();
            data.putString("title", "my title");
            Fragment fragment2 = new Fragment2();
            fragment2.setArguments(data);
            FragmentTransaction agm_ft = getSupportFragmentManager()
                    .beginTransaction();
            agm_ft.replace(R.id.frag_containor, fragment2,
                    "agm_frag");
            agm_ft.addToBackStack(null);
            agm_ft.commit();

并在下一个片段中取回它:

    Bundle getData = getArguments();
    title = getData.getString("title");

【讨论】:

  • 我在 getSupportFragmentManager() 中遇到问题。错误说“找不到符号 getSupportFragmentManager”。我正在使用片段,我的主要是 Activity。
  • 我在 getSupportFragmentManager() 中遇到问题。错误说“找不到符号 getSupportFragmentManager”。我正在使用片段,我的主要是 Activity。
  • 使用 FragmentTransaction agm_ft = getActivity().getSupportFragmentManager().beginTransaction();
【解决方案2】:

1) 创建Interface

public interface TitleChangeListener {
    public void onUpdateTitle(String title);
}

2) 在Fragment 2

创建一个public 方法

public void setTitle(String title){
    //Do Somthing
   }

3)让Activity实现Interface TitleChangeListener并覆盖onUpdateTitle

 public void onUpdateTitle(String title){
  fragment2.setTitle(title);
 }

4) 在按钮中 onClickListner ,第一个 Fragment

   TitleChangeListener listener=(TitleChangeListener)getActivity();
   listener.onUpdateTitle("Lady Gaga");

【讨论】:

    【解决方案3】:

    要从一个片段获取字符串到另一个片段,您必须使用捆绑包并将它们设置为如下参数:

    //on button click
    
    String title = "Lady Gaga";
    
            Fragment fr = new Final_Categories_Fragment();
            Bundle b = new Bundle();
    
            b.putString("title", title);
            fragmentManager.beginTransaction()
    
                    .add(R.id.list_frame, fr, "last").commit();
            fr.setArguments(b);
    
    //Now on another fragment you have to get this argument 
    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
    
            View rootView = inflater.inflate(R.layout.sub_child_category_listview,
                    container, false);
            ...
    
        String  title = getArguments().getString("title");
        ...
            return rootView;
        }
    

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多