7

我有一个带有列表的活动,其项目由图像+文本组成。我需要允许用户更改视图并使用 gridview 代替它(其元素仍然由相同的图像+文本组成)。

用户可以通过图标菜单进行操作:

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

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

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);
}
4

2 回答 2

11

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

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

  2. ListView和都GridView放在ViewFlipper中

  3. 或者,使用ViewSwitcher

  4. 最后,只使用 a GridView,但是当您想要转换到列表视图时,以编程方式将列数设置为 1。

于 2013-09-29T10:25:35.580 回答
0

我终于解决了这样的问题:

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

<?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>

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

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

于 2014-12-06T14:07:55.237 回答