【问题标题】:Passing from a listview to a gridview从列表视图传递到网格视图
【发布时间】:2013-09-29 09:34:08
【问题描述】:

我有一个带有列表的活动,其项目由图像+文本组成。我需要允许用户更改视图并使用 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);
}

【问题讨论】:

    标签: android listview gridview


    【解决方案1】:

    您可以通过多种方式实现这一目标。

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

    2. 将ListView 和GridView 都放在ViewFlipper 中

    3. 或者,使用ViewSwitcher

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

    【讨论】:

    • @Andy Res 你能提供一些链接/教程以从列表视图动态更改为网格视图或反之亦然吗?
    • 第 4 点。多么完美的解决方案!
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      • 2011-07-26
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      相关资源
      最近更新 更多