从listview传递给gridview

我有一个列表的活动,其中的项目是由图像+文本。 我需要允许用户改变视图,并有一个gridview而不是它(其元素仍然是由相同的图像+文本)。

用户可以通过图标菜单来完成:

public boolean onOptionsItemSelected(MenuItem item) { if(item.getItemId()== R.id.change_view) { // ? } } 

我试图设置新的适配器(见下文),但它不工作..我必须创build一个新的活动来做到这一点?

 if(item.getItemId()== R.id.change_view) { setContentView(R.layout.grid_view); gridViewAdapter = new GridViewAdapter(this,R.layout.bookmark_list_item,MyApp.getItems().findAll()); list.setAdapter(gridViewAdapter); list.setVisibility(View.VISIBLE); } 

Solutions Collecting From Web of "从listview传递给gridview"

有几种方法可以实现这一点。

  1. 一种解决scheme是将ListViewGridView堆叠在一个FrameLayout ,当你想在这些视图之间切换时,将可见性GONE设置为一个视图,将VISIBLE为另一个视图,然后反之亦然。

  2. ListViewGridView放在一个ViewFlipper中

  3. 或者,使用ViewSwitcher

  4. 最后,只使用一个GridView ,但是当你想转换到一个列表视图时,通过编程设置列数为1。

我终于解决了这样的事情:

对于我的活动布局,我有:

 <?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ViewStub android:id="@+id/list" android:inflatedId="@+id/showlayout" android:layout="@layout/list_view" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"/> <ViewStub android:id="@+id/grid" android:inflatedId="@+id/showlayout" android:layout="@layout/grid_view" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"/> </merge> 

那么我已经定义了列表和网格的布局(以及它们的项目),并且pipe理它们之间的通道,使布局膨胀,然后通过这种方法:

 private void changeView() { //if the current view is the listview, passes to gridview if(list_visibile) { listview.setVisibility(View.GONE); gridview.setVisibility(View.VISIBLE); list_visibile = false; setAdapters(); } else { gridview.setVisibility(View.GONE); listview.setVisibility(View.VISIBLE); list_visibile = true; setAdapters(); } } 

完整的代码在这篇文章中可用: http : //pillsfromtheweb.blogspot.it/2014/12/android-passare-da-listview-gridview.html