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

2 に答える 2

11

それを達成する方法はいくつかあります。

  1. 1 つの解決策は、 と の両方ListViewを にGridView積み重ねて、FrameLayoutこれらのビューを切り替えたい場合は、可視性GONEを 1 つのビューに設定し、VISIBLE別のビューに設定してから、その逆にすることです。

  2. との両方ListViewViewFlipperGridViewに入れます

  3. または、ViewSwitcherを使用します

  4. 最後に だけを使用し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 に答える