在运行时创建列表视图并将其添加到布局

时间:2012-05-10 07:53:13

标签: android android-layout android-listview

我有这样的设计

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="0.20"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/backbutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Back" />

    <Button
        android:id="@+id/nextbutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="next" />
</LinearLayout>
<!-- the two columns part -->

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="0.80"
    android:orientation="horizontal" >

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="0.80" 
        android:id="@+id/submenue"
        >

         <!-- this will be the menue list -->
         <ListView
            android:id="@+id/MyHiddenListView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="gone" 
            >



            </ListView>

            <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/contents"
            />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="First Name" />


    </LinearLayout>

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="0.20" 
        android:id="@+id/mainLayout"
        >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="second Name" />
    </LinearLayout>
</LinearLayout>

我将以下代码添加到下一个按钮,以便显示并填充列表

this.next = (Button)this.findViewById(R.id.nextbutton);
        this.next.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {

                String[] MainMenue =  new String[] { "aaaa", "bbb", "ccc"};

                menueview = (ListView)findViewById(R.id.MyHiddenListView);
                menueview.setVisibility(ListView.VISIBLE);
                menueview.setAdapter(new submenueadapter(getApplicationContext(), MainMenue));

            }
        });

,适配器类是

package com.appnetics;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class submenueadapter   extends ArrayAdapter<String> {

    private final Context context;
    private final String[] values;


    public submenueadapter(Context context,String[] objects)
    {


        super(context, R.layout.main, objects);
        this.context = context;
        this.values = objects;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View rowView = inflater.inflate(R.layout.main, parent, false);
        TextView textView = (TextView) rowView.findViewById(R.id.contents);

        textView.setText(values[position]);

        // Change icon based on name
        String s = values[position];

        System.out.println(s);


        return rowView;
    }
}

问题是列表中是否填充了数组以及页面中的其他控件(2个按钮)

点击下一步之前的布局 enter image description here 点击后的布局 enter image description here 有任何想法来解决这个问题

祝你好运 最好的问候

2 个答案:

答案 0 :(得分:2)

ViewGroup类提供了各种方法来在任何地方添加视图,并且使用LayoutParams类,您可以传递各种父容器类特定属性,以应用于要添加到容器中的子视图。

你可以google并且很容易实现。

我还可以考虑使用Visibility GONE将ListView放在XML中。

在特定动作触发器上使其可见。这将阻止我做一些在特定位置添加视图所需的编程内容。 我也不觉得这种方法有任何危害。

例如

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

        <Button
            android:id="@+id/backbutton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Back" />
        <ListView
            android:id="@+id/MyHiddenListView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="gone" />
</Linearlayout>

在.java文件中

btnBack = (Button)findViewById(R.id.backbutton);
myListView = (ListView)findViewById(R.id.MyHiddenListView);

btnBack.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
      myListView.setVisibility(ListView.VISIBLE);
      myListView.setAdaptor(new MyListViewAdaptor());
   }
});

希望有所帮助:)

答案 1 :(得分:2)

主要问题是您将所有内容都包含在一个 main.xml 布局中。

由于这个问题,你得到每个listitem的后退/下一个按钮(实际上整个布局正在重复为Listitem)。

<强> Soluition:

相反,尝试为ListItem定义单独的布局,并在getView()方法中扩展该布局。所以必须有2个XML布局文件,一个只有ListView的主设计,另一个只有每个列表项所需的视图。

例如,(1)main.xml(2)row_item.xml

现在,你只需要在膨胀布局的代码中进行修正:

View rowView = inflater.inflate(R.layout.row_item, parent, false);  // row_item.xml is inflated here