Освой программирование играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Список с двустрочным текстом, разными значками и адаптером SimpleAdapter

Простенький список с разными значками для каждого пункта и текстом в два ряда, когда имеется небольшой массив для отображения.

Добавим в основную разметку компонент ListView.

Создадим разметку для отдельного пункта списка (list_item.xml).


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="5"
        android:orientation="vertical">

        <TextView
            android:id="@+id/textview_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="25sp"
            tools:text="This is Title" />

        <TextView
            android:id="@+id/textview_description"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            tools:text="This is Description" />
    </LinearLayout>

    <ImageView
        android:id="@+id/imageview_icon"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@mipmap/ic_launcher" />

</LinearLayout>

Выводим данные в список


package ru.alexanderklimov.listview;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity {

    private static final String TITLE = "catname"; // Верхний текст
    private static final String DESCRIPTION = "description"; // ниже главного
    private static final String ICON = "icon";  // будущая картинка

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView listView = (ListView) findViewById(R.id.listView);

        // создаем массив списков
        ArrayList<HashMap<String, Object>> catList = new ArrayList<>();
        
        HashMap<String, Object> hashMap;

        hashMap = new HashMap<>();
        hashMap.put(TITLE, "Рыжик"); // Название
        hashMap.put(DESCRIPTION, "Рыжий и хитрый"); // Описание
        hashMap.put(ICON, R.drawable.cat_gold); // Картинка
        catList.add(hashMap);

        hashMap = new HashMap<>();
        hashMap.put(TITLE, "Васька");
        hashMap.put(DESCRIPTION, "Слушает да ест");
        hashMap.put(ICON, R.drawable.cat_green);
        catList.add(hashMap);

        hashMap = new HashMap<>();
        hashMap.put(TITLE, "Мурзик");
        hashMap.put(DESCRIPTION, "Спит и мурлыкает");
        hashMap.put(ICON, R.drawable.cat_yellow);
        catList.add(hashMap);

        hashMap = new HashMap<>();
        hashMap.put(TITLE, "Барсик");
        hashMap.put(DESCRIPTION, "Болеет за Барселону");
        hashMap.put(ICON, R.drawable.cat_white);
        catList.add(hashMap);

        SimpleAdapter adapter = new SimpleAdapter(this, catList,
                R.layout.list_item, new String[]{TITLE, DESCRIPTION, ICON},
                new int[]{R.id.textview_title, R.id.textview_description, R.id.imageview_icon});

        // Устанавливаем адаптер для списка
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(itemClickListener);
    }

    AdapterView.OnItemClickListener itemClickListener = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            HashMap<String, Object> itemHashMap =
                    (HashMap<String, Object>) parent.getItemAtPosition(position);
            String titleItem = itemHashMap.get(TITLE).toString();
            String descriptionItem = itemHashMap.get(DESCRIPTION).toString();
            int imageItem = (int)itemHashMap.get(ICON);
            Toast.makeText(getApplicationContext(),
                    "Вы выбрали " + titleItem + ". Он " + descriptionItem, Toast.LENGTH_SHORT)
                    .show();
        }
    };
}

Значки и двустрочный текст

Реклама