2015-08-30 42 views
0

我想在用户点击一个片段后,将视图frm gridview更改为listview。动态更改为Listview frm Gridview

但我无法做到这一点。 搜索了很多关于谷歌的Quora和SO但没有finad任何解决方案

这里是我的代码片段

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 初始视图does not熄灭。

专辑是gridview布局。

album_list是listview布局。

我没有得到任何错误,但逻辑上它不工作。

任何人都可以告诉我我的错误吗?

Thanx提前

回答

2

您可以使用recyclerview来做到这一点。

将layoutmanmanager设置为gridview的gridlayout管理器和listview的linearlayout管理器。

根据条件使用您的逻辑。

2

一个选项提供给您的使用GridView和动态取决于状态的列数而改变。 GridView具有numColumns属性,您可以在运行时更改该属性,然后通过在适配器上调用notifyDataSetChanged来应用该属性。

+1

看看这个答案http://stackoverflow.com/questions/12837780/android-set-the-gridview-to-have-2-columns-per-row-only –

+1

我一直在寻找你指向正确的方向而不是为你工作。 –

1

您可以使用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

1

如果你想改变GridView的风格到ListView的风格和ListView样式来progamatically 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; 

      } 
     } 

    });