#android #android-layout
#Android #android-layout
Вопрос:
В моем приложении у меня есть макет list_item.xml с 3 текстовыми представлениями, которые заполняются из массива, и я хочу раздуть только эти 3 текстовых представления в другом макете. Макет, в котором я хочу выполнить раздувание, представляет собой отдельный XML-файл layout_result.xml который имеет единственную кнопку и виджет поиска для Android.
файл макета для list_item.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minWidth="25px"
android:minHeight="25px"
android:background="#F0F8FF"
android:orientation="horizontal"
android:layout_weight="1">
<TextView
android:id="@ id/ID"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@ id/ProductName"
android:layout_alignBottom="@ id/ProductName"
android:layout_alignParentLeft="true"
android:text="New Text" />
<TextView
android:id="@ id/Status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginRight="17dp"
android:layout_marginTop="42dp"
android:text="New Text" />
<TextView
android:id="@ id/Name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@ id/Status"
android:layout_alignBottom="@ id/Status"
android:layout_centerHorizontal="true"
android:text="New Text" />
</RelativeLayout>
Макет для list_resut.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minWidth="25px"
android:minHeight="25px"
android:background="#F0F8FF"
android:orientation="horizontal"
android:layout_weight="1">
<SearchView
android:id="@ id/searchView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="118dp"
android:layout_marginTop="16dp" >
</SearchView>
<Button
android:id="@ id/search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignTop="@ id/searchView1"
android:layout_marginLeft="22dp"
android:text="Button" />
</RelativeLayout>
Проблема, с которой я столкнулся, когда попытался включить виджет поиска и кнопку внутри list_item.xml и раздувание их заключалось в том, что виджет поиска и кнопка вставлялись в каждый из 3 элементов textview.
Итак, я создал этот отдельный макет list_result.xml который содержит только виджет поиска и кнопку.
Вопрос, есть ли вообще место, где я могу разместить это list_item.xml с результатами textview внутри list_result.xml чтобы исправить эту ошибку?
Мое средство раздувания макета для list_item выглядит следующим образом,
public View getView(int i, View view, ViewGroup viewGroup) {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.list_item, viewGroup, false);
TextView txtName = (TextView) itemView.findViewById(R.id.Name);
TextView txtID= (TextView) itemView.findViewById(R.id.ID);
TextView txtStatus = (TextView) itemView.findViewById(R.id.Status);
txtName.setText(list.get(i).getProductName());
txtID.setText(list.get(i).getProductID());
txtStatus.setText(list.get(i).getStatus());
return itemView;
}
}
Комментарии:
1. включение не приводит к раздуванию. кстати, я прочитал три раза и не понял проблему. Не могли бы вы немного перефразировать?
2. Привет, blackbelt, теперь я перефразировал свою проблему. Надеюсь, это понятно!
3. Я тоже прочитал несколько раз и полностью запутался. Однако то, что вы, возможно, пытаетесь сделать, это использовать ваш
list_resut.xml
в качестве макета вsetContentView()
для вашегоActivity
и добавить к немуListView
. Затем вы раздуваете свойTextView
макет вgetView()
, как вы делаете сейчас.4. Привет, codeMagic, да, я пробовал это раньше, но я всегда получал сообщение об ошибке «Просмотр не найден для id». Итак, я спросил, есть ли какой-либо другой способ сделать это.
Ответ №1:
Вы должны быть в состоянии просто создать один макет XML. Не уверен, как вы делали это ранее, но вы могли бы сделать что-то вроде этого:
<RelativeLayout>
<RelativeLayout>
<TextView/>
<TextView/>
<TextView/>
</RelativeLayout/>
<SearchView/>
<Button/>
</RelativeView>
Если вы хотите сохранить XML отдельно, а затем объединить их во время выполнения, вам все равно нужен «контейнер» для увеличенных текстовых представлений. Вы могли бы использовать FrameLayout в качестве контейнера. Что-то вроде этого, например:
results.xml:
<RelativeLayout>
<FrameLayout/>
<SearchView/>
<Button/>
</RelativeLayout>
items.xml
<RelativeLayout>
<TextView/>
<TextView/>
<TextView/>
</RelativeView/>
И затем вы можете вставить текстовые представления в другой макет следующим образом:
ViewGroup container = (ViewGroup) findViewById(R.id.FrameLayoutId);
container.addChild(yourInflaterItemsView);
Надеюсь, это поможет