2015-08-30 39 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; 

      } 
     } 

    });