动态更改为Listview frm Gridview

时间:2015-08-30 13:28:36

标签: android listview gridview fragment

我希望在用户在片段中点击视图后,将视图frm gridview更改为listview。

但我无法做到这一点。 在谷歌Quora和SO上搜索了很多,但没有找到任何解决方案

这是我的片段代码

public class FragmentAlbum extends Fragment  {

@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container,Bundle savedInstanceState) {
   root = (ViewGroup) inflater.inflate(R.layout.album,container, false);


    activity = getActivity();
        lv=(GridView) root.findViewById(R.id.gridview);
        lv.setAdapter(adaptor);

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                        public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

          root = (ViewGroup) inflater.inflate(R.layout.album_list,container, false);
         listview=(ListView) root.findViewById(android.R.id.list);

                  listview.setAdapter(adaptor1);    
                  break;

         }

             }}
);

        return root;
}

。 当我点击视图仍然在Gridview中 初步观点不会消失。

专辑是gridview布局。

album_list是listview布局。

我没有收到任何错误,但从逻辑上讲它不起作用。

有谁能告诉我我的错误?。

提前完成

4 个答案:

答案 0 :(得分:4)

您可以使用recyclerview进行此操作。

将layoutmanager设置为gridview的gridlayout manager和listview的linearlayout manager。

根据条件使用您的逻辑。

答案 1 :(得分:2)

您可以使用的一个选项是使用GridView并根据状态动态更改列数。 GridView有一个numColumns属性,您可以在运行时更改该属性,然后通过在适配器上调用notifyDataSetChanged来应用它。

答案 2 :(得分:2)

您可以使用RecyclerView并根据您的列数将ListView更改为GridView,与其他帖子相比,这非常简单。

private void setLayoutManager() {
    if (mColumnCount <= 1) {
        mColumnCount = 1;
        recyclerView.setLayoutManager(new LinearLayoutManager(context));
    } else {
        recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount));
    }
}

详细信息please check this blog post

答案 3 :(得分:1)

如果要将GridView样式更改为ListView样式,将ListView样式更改为GridView。然后以编程方式更改gridview的NO-OF-COLUMNS值。 喜欢这里

  switchIV.setOnClickListener(new OnClickListener()
    {
        public void onClick(View arg0) 
        {

            if(style==0)
            {

                //Change gridview to listview style
                gridview.setNumColumns(1);
                Update_with_ListView_Style();
                style=1;

            }
            else
            {
                //change gridview back to gridview style with 3 columns
                gridview.setNumColumns(3);
                 Update_with_GridView_Style();
                 style=0;

            }
        }

    });