@alneo
Интернет программист

Android Как в один ListView вывести разные layout.xml в цикле?

Есть ListView на Activity, есть массив данных(контактный лист) который необходимо отобразить в ListView. Как отобразить элементы массива по разному?
contacts - это строка json
contactsList = new ArrayList<HashMap<String, String>>();
        lv_contacts = (ListView) findViewById(R.id.lv_contacts);
        try {//Считаем контакты и заносим в contactsList
            mArray = new JSONArray(contacts);
            for (int i = 0; i < mArray.length(); i++) {
                JSONObject mJsonObject = mArray.getJSONObject(i);
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("cid", mJsonObject.getString("cid"));
                map.put("name", mJsonObject.getString("name"));
                contactsList.add(map);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        ListAdapter adapter = new SimpleAdapter(
                ContactsActivity.this, contactsList, R.layout.item_contactslist,
                new String[] { "cid","name"}, new int[] { R.id.cid, R.id.name });
        lv_contacts.setAdapter(adapter);

Код item_contactslist.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/list_item"
    android:gravity="center_vertical">
    <TextView
        android:id="@+id/cid"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:visibility="gone" />
    <TextView
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="6dp"
        android:paddingLeft="6dp"
        android:textSize="17sp"
        android:textStyle="bold" />
</LinearLayout>

как сделать к примеру каждый второй контакт другим стилем? Или второй отображать с выравниванием по правому краю? или с * перед именем?
Использовать несколько layout-ов .xml? или все в одном можно реализовать?
  • Вопрос задан
  • 1615 просмотров
Решения вопроса 1
@onepavel
Консультация и разработка мобильных приложений
Перегрузите адаптер android.leocardz.com/multiple-layout-listview
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Mintormo
Сделать несколько лэйаутов с нужными стилями для элемента списка. Написать свой адаптер для списка. В методе, который отдаёт лэйаут для элемента, прописать какой отдавать в зависимости от четности номера элемента, если надо чтобы было чередование, например.
Ответ написан
@abukhvalov
Бездарность. Хуже Петросяна.
Вам нужен кастомный адаптер. Что-то типа:
private class MySimpleAdapter extends SimpleAdapter{

    public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout. item_contactslist, null);
        }
        HashMap<String, String> item = (HashMap<String, String>) ListOfContacts.getItemAtPosition(position);
            if(item.get("name") != null){
                name.setText(item.get("name"));
            }else{
                 name.setText("NoNamed");
            }
        return v;
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы