Początkujący Android tutaj. Grałem z ListViews, próbując utworzyć je dynamicznie zamiast pliku XML. Obserwuję następujące dziwne zachowanie w moim kodzie.Tworzenie ListView programowo
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);
}
}
Zasadniczo najpierw utworzę obiekt LinearLayout, a następnie utworzę obiekt ListView jako jedno z jego elementów podrzędnych. Zauważyłem, że tak utworzone elementy listy nie są klikalne. Ale jeśli piszę
setContentView(lv);
zamiast
setContentView(ll);
elementy listy są klikalne. Czy ktoś może to wyjaśnić? Jak sprawić, aby elementy listy były klikalne, jeśli będę musiał zaimplementować moją klasę w ten sam sposób? Nie chcę iść drogą 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>
Twój kod wygląda dobrze, nawet skompilowałem się, aby się upewnić, ale OnItemClickListener jest wykonywany zgodnie z obietnicą ... – Sam
Co się stanie, jeśli ustawisz widok treści, a następnie dodasz listvieww? – Barak
Nie, nadal nie działa. Lista wyświetla się dobrze, ale elementy listy są nie do kliknięcia. – VJune