Ответ 1
Несколько вещей, о которых я могу думать.
Во-первых, ваш RelativeLayout не имеет относительной информации о местоположении. Я предполагаю, что вы хотели поместить это в LinearLayout с ориентацией, настроенной на вертикаль, от того, что вы описываете. Я предполагаю, что список на самом деле не нарисован, так как он даже не привязан к чему-либо в текущем RelativeLayout. Если вы придерживаетесь RelativeLayout, обязательно поместите идентификатор в текстовое поле app_name и поместите ListView под ним через layout_below.
Решение LinearLayout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView android:text="@string/app_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
></TextView>
<ListView android:id="@+id/selectView"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
</ListView>
</LinearLayout>
RelativeLayout Решение:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/app_name_text"
android:text="@string/app_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
></TextView>
<ListView android:id="@+id/selectView"
android:layout_below="@id/app_name_text"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
</ListView>
</RelativeLayout>
Затем ваш getView() возвращает тот же textView для всех 3 индексов. Это не проблема отображения одного и того же представления по нескольким индексам, но с размером списка из трех, я уверен, что на экране может отображаться все три одновременно. И поскольку представление не может быть в нескольких местах за раз, я действительно ожидаю, что это сбой, поэтому я сомневаюсь, что он даже добирается до этого кода. Попробуйте создать новый TextView для каждого getView(). Также у вашего MockTextView нет собственных параметров макета. Таким образом, размещение внутри ячейки listView может и не происходить. Поэтому вы можете дать ему параметры типа AbsListView.LayoutParams(WRAP_CONTENT, WRAP_CONTENT). Опять же, если бы я ожидал, что это ошибка, если она попадет в исходный код.
getView() убрать:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
TextView textView = new TextView(parent.getContext());
textView.setText("Position is:"+position);
textView.setBackgroundColor(Color.CYAN);
textView.setLayoutParams(new AbsListView.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
convertView = textView;
}
return mMockTextView;
}
И, наконец, высота вашего списка может быть проблематичной. Я не знаю всех сценариев. Если вы в конечном итоге перейдете на LinearLayout, попробуйте установить layout_height в виде списка на 0, а затем установите layout_weight = 1. Это заставляет линейную компоновку раздувать ее на большее пространство.
Весовое решение LinearLayout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView android:text="@string/app_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
></TextView>
<ListView android:id="@+id/selectView"
android:layout_weight="1"
android:layout_height="0dp"
android:layout_width="wrap_content">
</ListView>
</LinearLayout>