【问题标题】:SherlcokFargments Button in one fragment to call second fragmentSherlcokFargments 一个片段中的按钮来调用第二个片段
【发布时间】:2012-09-13 12:23:01
【问题描述】:

我试图弄清楚片段是如何工作的。 我有 3 个类,MainActivity、Fragment1 和 Fragment2。

MainActivity 扩展了 SherlockFragmentActivity 和

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Fragment1 firstFragment = new Fragment1();
    firstFragment.setArguments(getIntent().getExtras());
    getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment_container1, firstFragment).commit();

现在,我将 Fragment1 加载到我的 fragment_container 中,它显示得很好。

(所以 main_activity.xml 只有一个)

好的,Fragment1 扩展了 SherlockFragment,然后什么都不做

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    return inflater.inflate(R.layout.fragment1layout, container, false);

所以我只是从具有一个文本视图和一个按钮的 .xml 中对其进行扩展。

现在我可以在哪里实例化 Button,并为他提供代码以将 Fragment1 替换为 Fragment2?

代码是什么,因为我现在“在 Fragment1 中”,所以我需要以某种方式与 Fragment holder 沟通并告诉它“用 Fragment2 替换我”。

Fragment2 也扩展了 SherlockFragment,并且什么都不做,将它膨胀为空的 .xml

【问题讨论】:

    标签: android android-fragments actionbarsherlock


    【解决方案1】:

    你必须像下面这样从 fragment1 调用你的 fragment2

      public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.fragment1layout, container, false);
                Button button = (Button)view.findViewById(R.id.yourButton);
                button.setOnClickListener(new OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        //Replace your fragment
    
                    }
                });
            return view;
    }
    

    【讨论】:

    • 你真幸运 :) 我试过没有 view.findViewBy ...然后它不起作用。谢谢!这至少有助于理解一点,但我需要的是同一“视图”上的 2 个片段..
    【解决方案2】:

    我现在“在 Fragment1 中”,所以我需要以某种方式与 Fragment holder 沟通并告诉它“用 Fragment2 替换我”。

    如果您想在单击进入 Fragment1 的按钮时将 Fragment1 替换为 Fragment2:

    (最佳实践)

    1. 您应该像here 中描述的那样创建从 fragment1 到 MainActivity 的回调
    2. 进入 MainActivity 放置逻辑,将 Fragment1 替换为 Fragment2。

    (不良做法)

    1. MainActivity 中创建方法,这会将一个片段替换为另一个片段,例如changeFirstFragmentToAnother()
    2. 那么当您需要将 fragment1 更改为 fragment2 时,您可以手动(从 fragment1)调用此方法,如下所示:

      ((MainActivity)getActivity()).changeFirstFragmentToAnother();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多