Я думаю, вы неправильно поняли другие посты, которые я показывал вам в предыдущем вопросе.Они объясняли, как использовать пользовательский макет для каждой строки в списке, а не как определять весь файл макета для действия.Вам нужно что-то вроде этого:
(main.xml)
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#00000000"
android:id="@android:id/list">
</ListView>
Обратите внимание на очень важную строку android:id="@android:id/list"
.Вы должны иметь это в своем ListView, поскольку именно это сообщает Android, где находится ваш список.CacheColorHint полезен, если ваш фон не черный - для получения более подробной информации см. этот пост .
С помощью приведенных выше строк вы можете дать своей активности список, который будет распознан правильно.Вот базовый пример:
public class TestProject extends ListActivity {
final static String[] ITEMS = {"blah", "floop", "gnarlp", "stuff"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.listrow, R.id.textview, ITEMS);
setListAdapter(adapter);
}
}
Тогда макет списка будет следующим:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textview"/>
</LinearLayout>
Это действительно простой макет.Если вы хотите получить что-то более сложное, изменения должны состоять в использовании BaseAdapter, так как он дает вам вызовы getView(...)
перед каждой строкой.В этом вы можете использовать разные макеты в зависимости от содержимого каждой строки.Тем не менее, BaseAdapter выглядит страшно, когда вы впервые попробуйте, так что будьте осторожны!:)