Как объяснили программисты, которые делали listView в этом видео от Google, я никогда не помещал ListView внутри View с прокруткой. Если ваш список не должен прокручиваться, используйте ViewGroup как линейный макет и добавьте все элементы в эту ViewGroup в цикле в вашем коде. Если вы хотите, чтобы вся строка была кликабельной, вы должны использовать другую ViewGroup в качестве корневого узла для каждой строки и добавить OnClickListener в это представление.
Так что просто замените ваш ListView
на LinearLayout
как
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/linear_layout_which_is_present_at_place_of_list_view"
android:orientation="vertical"/>
<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
и пусть вы использовали два TextView в качестве пользовательской строки представления списка. Так что пользовательский вид строки будет
row_view_layout.xml as
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content"
android:clickable="true"
android:id="@+id/row_view_layout_text1"
android:layout_height="wrap_content" />
<TextView android:id="@+id/row_view_layout_text2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true"/>
</LinearLayout>
Пример кода:
//Let you were using two TextView as custom row of list view.
LinearLayout list = (LinearLayout)findViewById(R.id.linear_layout_which_is_present_at_place_of_list_view);
LayoutInflater inflater = LayoutInflater.from(context);
list.removeAllViews(); //Remove previously created views
for(String row : getAllRow()) {
View vi = inflater.inflate(R.layout.row_view_layout, null);
textOne = (TextView) vi.findViewById(R.id.row_view_layout_text1);
textTwo = (TextView) vi.findViewById(R.id.row_view_layout_text2);
final String t1 = row.getFirstValue();
final String t2 = row.getSecondValue();
textOne.setText(t1);
textTwo.setText(t2);
//Set listener for both text views
textOne.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(context, "You clicked on : " + t1 , Toast.LENGTH_SHORT).show();
}
});
textTwo.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(context, "You clicked on : " + t2 , Toast.LENGTH_SHORT).show();
}
});
//Add view
list.addView(vi);
}
Надеюсь, это поможет.
Удачного кодирования.