一个活动中的Android多列表视图

时间:2015-02-08 17:09:17

标签: android listview android-activity

我试图在一个活动中放置多个列表视图。

我设法让一个工作正常,但我不确定如何让第二个和第三个列表视图显示在彼此相同的屏幕上。

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="\nDay 1:"
        android:layout_gravity="left"
        android:id="@+id/textView45"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />
    <ListView
        android:id="@+id/list"
        android:layout_height="wrap_content"
        android:layout_width="match_parent">
    </ListView>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="\nDay 2:"
        android:layout_gravity="left"
        android:id="@+id/textView46"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <ListView
        android:id="@+id/list2"
        android:layout_height="wrap_content"
        android:layout_width="match_parent">
    </ListView>

    <ListView
        android:id="@+id/list3"
        android:layout_height="wrap_content"
        android:layout_width="match_parent">
    </ListView>

</LinearLayout>

代码:

public class workoutlist extends Activity {
    ListView listView, listView2, listView3 ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.workoutlist);

        // Get ListView object from xml
        listView = (ListView) findViewById(R.id.list);
        // Defined Array values to show in ListView
        String[] values = new String[] { "Option 1",
                "Option 2",
                "Option 3",
        };

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, android.R.id.text1, values);
        listView.setAdapter(adapter);
        // ListView Item Click Listener
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {


                // Show Alert
                if(position == 0) {
                    //code specific to first list item
                    Toast.makeText(getApplicationContext(),
                            "Coming Soon." , Toast.LENGTH_SHORT)
                            .show();

                }

                if(position == 1) {
                    //code specific to 2nd list item
                    Toast.makeText(getApplicationContext(),
                            "Coming Soon." , Toast.LENGTH_SHORT)
                            .show();
                }

                if(position == 2) {
                    //code specific to 2nd list item
                    Toast.makeText(getApplicationContext(),
                            "Coming Soon." , Toast.LENGTH_SHORT)
                            .show();
                }

            }

        });
    }

}

2 个答案:

答案 0 :(得分:0)

基于Android文档,您不应该以这种方式使用多个ListView,因为它不像其他视图那样计算自己的高度,而是占用可用空间。

您可以使用标签,这样您就可以在同一个ListView中显示3 Activity,但在不同的标签中。这是关于如何做到这一点的tutorial

基本上,您为每个Fragments创建3个ListView,1,然后使用FragmentPageAdapter子类返回正确的Fragment

答案 1 :(得分:0)

您可以将ListViews的高度设置为0dp并使用&#34; android:layout_weight =&#34; 1&#34;在每个ListViews中。

<ListView
    android:id="@+id/list"
    android:layout_height="0dp"
    android:layout_width="match_parent"
    android:layout_weight="1">
</ListView>

如果你想在&#34; z&#34;您可以将LinearLayout更改为FrameLayout,将高度设置为&#34; match_parent&#34;在所有listViews中,只需在您不想要显示的列表上设置Visibility to Gone。