以编程方式创建ListView

VJu*_*une 5 android listview

Android初学者在这里.我正在玩ListViews,尝试动态创建它们而不是XML文件.我在代码中观察到以下奇怪的行为.

public class SettingsHolder extends Activity {

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    LinearLayout ll = new LinearLayout(this);
    ListView lv = new ListView(this);
    String[] values = new String[10];
    for(int i=0;i<10;i++){
        values[i] = ""+i;
    }
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, values);
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(new OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            //Toast.makeText(getBaseContext(), ""+arg2,     Toast.LENGTH_SHORT).show();
            Log.d("DEBUG", ""+arg2);

        }

    });

    ll.addView(lv);
    setContentView(ll);

}


}
Run Code Online (Sandbox Code Playgroud)

基本上我首先创建一个LinearLayout对象,然后将ListView对象作为其子对象之一.我发现这样创建的列表项不可点击.但如果我写

setContentView(lv);
Run Code Online (Sandbox Code Playgroud)

代替

setContentView(ll);
Run Code Online (Sandbox Code Playgroud)

列表项是可点击的.有人可以解释一下吗?如果我必须以后一种方式实现我的课程,如何使列表项可以点击?我不想采用ListActivity方式.

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="16sp" >
</TextView>
Run Code Online (Sandbox Code Playgroud)

Ruo*_*ang 6

改变你的代码:

ll.addView(lv);
Run Code Online (Sandbox Code Playgroud)

对此:

ll.addView(lv, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
Run Code Online (Sandbox Code Playgroud)

问题解决了,我想,你必须给listview一些布局限制或定义,这样才能正常工作.