从列表视图切换到网格视图

7
我有一个包含图像和文本的列表活动,我需要允许用户更改视图,并使用网格视图代替它(其元素仍然由相同的图像和文本组成)。
用户可以通过图标菜单来实现这一点:
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);
}
2个回答

11

有几种方法可以实现这个功能。

  1. 一种解决方案是将ListViewGridView都放在一个FrameLayout中,当你想要在这些视图间切换时,将一个视图设置为GONE,另一个设置为VISIBLE,然后反过来再执行。

  2. ListViewGridView都放在一个ViewFlipper

  3. 或者,使用ViewSwitcher

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


@Andy Res,你可以提供一些链接/教程来动态切换列表视图和网格视图吗? - Hendy
2
第四点。多么完美优雅的解决方案! - eidylon

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接