如何在按钮点击时显示/隐藏片段

时间:2015-02-05 06:58:08

标签: android android-activity android-fragments

Fragments ButtonFragment中有2 ListViewFragment - ActivityMainActivity

ButtonFragment包含ButtonListViewFragment包含ListView

每次点击ButtonFragment Button,我都希望ListViewFragment显示/隐藏。

如何正确编码?

目前我的代码如下:

MainActivity.java

public class MainActivity extends Activity implements Communicator {

    ButtonFragment buttonFrag;
    ListViewFragment listviewFrag;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        buttonFrag= new ButtonFragment();
        listviewFrag = new ListViewFragment();

        manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.add(R.id.button_fragment, buttonFrag, "Fragment1");
        transaction.add(R.id.listview_fragment, listviewFrag, "Fragment2");
        transaction.commit();
    }

}

ButtonFragment.java

public class DynamicButtonsFragment extends Fragment implements View.OnClickListener {

    Button btn;

    @Override
    public View onCreateView(LayoutInflater inflater,
            @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {       
        return inflater.inflate(R.layout.button_fragment_layout, container, false);
        }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public void onClick(View v) {
        //?? hide listview fragment from here ??
    }

}

ListViewFragment.java

public class ListViewFragment1 extends Fragment {

    protected ArrayAdapter<String> adapter1;

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

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

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

    }

}

所以我的问题是我在哪里实现ListViewFragment的显示/隐藏?我觉得我应该通过MainActivity的{​​{1}}方法将数据发送到onClick。但我不知道该怎么做。

或者我只在ButtonFragment中添加代码,因为MainActivity可以访问所有MainActivity

我遇到问题因为Fragments位于Button,而不是Fragment的一部分。我还没有真正看到这样的案例......

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:1)

您无法直接显示/隐藏片段。您可以显示/隐藏像Listview这样的UI对象。如果您愿意,可以使用FragmentTransaction显示/隐藏片段间接,您可以调用其方法添加,删除或替换。 示例代码的链接是Fragments

答案 1 :(得分:1)

这样做..

android.app.Fragment fragment = getActivity().getFragmentManager().findFragmentByTag("YOUR_FRAGMENT_TAG");
        getActivity().getFragmentManager().beginTransaction().hide(fragment);

在点击活动中!

当你添加这样的片段时还有一件事......

    transaction.add(R.id.button_fragment, buttonFrag, "Fragment1");
    transaction.add(R.id.listview_fragment, listviewFrag, "Fragment2");

您需要提供容器ID而不是片段的ID。

示例:对于MainActivity容器,请使用R.id.containerMain

答案 2 :(得分:0)

如果你在片段中想要做一些MainActivity函数,你可以尝试

         @Override
        public void onClick(View v) {
            //?? hide listview fragment from here ??
            ((MainActivity)getActivity()).hidelistView();
            //hidelistView you should imp in your MainActivity 
        }

答案 3 :(得分:0)

如果您在同一布局中有片段,则可以使用以下代码: http://www.java2s.com/Code/Android/Core-Class/Demonstrationofhidingandshowingfragments.htm

如果没有,那么你可以使用几种可能性...... 您可以使用Intent将数据发送到MainActivity。 您可以在单个实例中存储指向MainActivity的指针。

你也可以使用Handler发送消息,但上面描述的方式更容易实现,应该足够了。