2014-09-15 2 views
-1

Я использую следующий код, чтобы использовать ArrayAdapter для моего ListView:хочу использовать свой собственный макет в ArrayAdapter

ArrayList<String> mylist = new ArrayList<String>(); 
    String xml = ParseXMLMethods.getXML(); 
    Document doc = ParseXMLMethods.XMLfromString(xml); 
    NodeList children = doc.getElementsByTagName(KEY_ITEM); 
    for (int i = 0; i < children.getLength(); i++) {  


     Element e = (Element)children.item(i); 
     mylist.add(ParseXMLMethods.getValue(e, KEY_TITLE)); 
     mylist.add(ParseXMLMethods.getValue(e, KEY_CITY)); 
     mylist.add(ParseXMLMethods.getValue(e, KEY_COUNT)); 
    } 
    adapter1=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,  
    mylist); 
    list2.setAdapter(adapter1); 

Здесь я могу видеть только название, но я хочу, чтобы увидеть все три в моей ListView Row.For это я создаю другую раскладку R.layout.list_layout2 следующим образом:

Мой макет

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="50dp" 
    android:paddingLeft="6dp" 
    > 
    <TextView 
     android:id="@+id/title" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:padding="1dp" 
     android:textSize="16dp" 
     android:textStyle="bold" 
     /> 
     <RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 
    <TextView 
    android:id="@+id/subtitle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingLeft="1dp" 
    android:textSize="12dp" 
    android:textColor="#000000" /> 
    <TextView 
    android:id="@+id/subtitle2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingLeft="10dp" 
    android:textSize="12dp" 
    android:textColor="#000000" 
    android:layout_toRightOf="@+id/subtitle" /> 
    </RelativeLayout> 
    </LinearLayout> 

Как я могу использовать этот макет?

ответ

0

Вы хотите посмотреть на Custom ListView Adapter. Обратите внимание, что ваш исходный код использует собственный ListView, но не Adapter. Вы захотите создать свой собственный адаптер, который расширяет ArrayAdapter, так как строка ListView более сложна, чем один TextView.

См. Tutorial и enter link description here.

Ex:

list_row.xml

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
    <TableRow> 
     <ImageView 
      android:id="@+id/img" 
      android:layout_width="50dp" 
      android:layout_height="50dp"/> 
     <TextView 
      android:id="@+id/txt" 
      android:layout_width="wrap_content" 
      android:layout_height="50dp" /> 
    </TableRow> 
</TableLayout> 

CustomList.java

public class CustomList extends ArrayAdapter<String>{ 
    private final Activity context; 
    private final String[] web; 
    private final Integer[] imageId; 
    public CustomList(Activity context, String[] web, Integer[] imageId) { 
     super(context, R.layout.list_single, web); 
     this.context = context; 
     this.web = web; 
     this.imageId = imageId; 
    } 
    @Override 
    public View getView(int position, View view, ViewGroup parent) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     View rowView= inflater.inflate(R.layout.list_row, null, true); 
     TextView txtTitle = (TextView) rowView.findViewById(R.id.txt); 
     ImageView imageView = (ImageView) rowView.findViewById(R.id.img); 
     txtTitle.setText(web[position]); 
     imageView.setImageResource(imageId[position]); 
     return rowView; 
    } 
} 

В приведенном выше примере, вы будете хотеть, чтобы переключить вне ImageView и замените его на TextViews.

+0

Я уже использовал описанный выше метод, но проблема в том, что всякий раз, когда я вызывал этот пользовательский адаптер на своей основной странице активности, ему нужен массив KEY_TITLE, KEY_CITY, KEY_COUNT.unable, чтобы получить этот массив String после синтаксического анализа XML. также –

+0

В этом случае, похоже, ваша проблема также связана с разбором XML. Как выглядит ваш 'mylist' ArrayList сразу после последнего оператора' .add'? Он содержит именно то, что вы ищете? Во-вторых, если у вас есть сложный ListView (т. Е. Более одного TextView), вы не можете просто использовать базовый ArrayAdapter. Вы также должны создать пользовательский адаптер. [См. Этот учебник для справки] (http://mrbool.com/how-to-create-list-in-android-applications-with-array-adapter/28038). – erad

Смежные вопросы