5

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

}


}

基本上,我首先创建一个 LinearLayout 对象,然后将 ListView 对象作为其子对象之一。我观察到如此创建的列表项不可点击。但如果我写

setContentView(lv);

代替

setContentView(ll);

列表项是可点击的。谁能解释一下?如果我必须以后一种方式实现我的类,如何使列表项可点击?我不想采用 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>
4

2 回答 2

6

更改您的代码:

ll.addView(lv);

对此:

ll.addView(lv, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

问题解决了,我想,你必须给列表视图某种布局限制或定义,这样它才能正常工作。

于 2012-06-12T07:52:38.540 回答
2

我能够让它工作,但我必须在 XML 中创建 LinearLayout,我意识到这与你拥有它的方式不同。但是,考虑到无论哪种方式,LinearLayout 都是根元素,并且您仍在以编程方式创建 ListView,恕我直言,它确实应该没有区别。

public class ExampleActivity extends Activity implements OnItemClickListener {

private LinearLayout ll;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    ll = (LinearLayout) findViewById(R.id.main_ll);
    ListView lv = new ListView(this);
    ll.addView(lv);

    String[] values = new String[10];
    for (int i = 0; i < 10; i++) {
        values[i] = "" + i;
    }

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, values);
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(this);
}

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

}

于 2012-06-12T05:27:28.343 回答