Подтвердить что ты не робот

Может ли кто-нибудь предоставить мне пример Two_line_list_item в Android?

Может ли кто-нибудь предоставить мне пример two_line_list_item?

4b9b3361

Ответ 1

Мне еще предстоит найти пример, который на самом деле использует встроенный макет, android.R.layout.two_line_list_item и ListView insted ListActivity. Так вот.

Если вы спешите, переопределение TwoLineArrayAdapter.getView() ниже - важная часть использования макета two_line_list_item по умолчанию.

Ваши данные

У вас есть класс, который определяет ваши элементы списка. Я предполагаю, что у вас есть массив из них.

public class Employee {
    public String name;
    public String title;
}

Абстрактный TwoLineArrayAdapter

Этот абстрактный класс может быть повторно использован и упрощает определение двухстрочного ListView. Вы можете предоставить свой собственный макет, но два конструктора аргументов используют встроенный макет two_line_list_item. Единственное требование для макетов элементов пользовательского списка состоит в том, что они должны использовать @android:id/text1 и @android:id/text2 для идентификации своих детей TextView, как это делает two_line_list_item.

public abstract class TwoLineArrayAdapter<T> extends ArrayAdapter<T> {
        private int mListItemLayoutResId;

        public TwoLineArrayAdapter(Context context, T[] ts) {
            this(context, android.R.layout.two_line_list_item, ts);
        }

        public TwoLineArrayAdapter(
                Context context, 
                int listItemLayoutResourceId,
                T[] ts) {
            super(context, listItemLayoutResourceId, ts);
            mListItemLayoutResId = listItemLayoutResourceId;
        }

        @Override
        public android.view.View getView(
                int position, 
                View convertView,
                ViewGroup parent) {


            LayoutInflater inflater = (LayoutInflater)getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View listItemView = convertView;
            if (null == convertView) { 
                listItemView = inflater.inflate(
                    mListItemLayoutResId, 
                    parent, 
                    false);
            }

            // The ListItemLayout must use the standard text item IDs.
            TextView lineOneView = (TextView)listItemView.findViewById(
                android.R.id.text1);
            TextView lineTwoView = (TextView)listItemView.findViewById(
                android.R.id.text2);

            T t = (T)getItem(position); 
            lineOneView.setText(lineOneText(t));
            lineTwoView.setText(lineTwoText(t));

            return listItemView;
        }

        public abstract String lineOneText(T t);

        public abstract String lineTwoText(T t);
}

Конкретный адаптер TwoLineArray

Наконец, вот код, который вы пишете для вашего класса Employee, чтобы он отображался в вашем ListView.

public class EmployeeArrayAdapter extends TwoLineArrayAdapter<Employee> {
    public EmployeeArrayAdapter(Context context, Employee[] employees) {
        super(context, employees);
    }

    @Override
    public String lineOneText(Employee e) {
        return e.name;
    }

    @Override
    public String lineTwoText(Employee e) {
        return e.title;
    }
}

Activity.onCreate()

В вашем действии onCreate() у вас будет код, который выглядит следующим образом:

    employees = new Employee[...];
    //...populate the employee array...

    employeeLV = (ListView)findViewById(R.id.employee_list);
    employeeLV.setAdapter(new EmployeeArrayAdapter(this, employees);