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オブジェクトを作成し、次にその子の1つとして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 に答える