Задать вопрос

Как сделать кастомизацию listView в android?

Есть два ArrayList со стринг данными. Сделал отдельный экран где указал 2 textView. Нужно вывести один arraylist в один textView, а второй в другой.
Только не пойму как это записать в адаптере, мой пример на одиночный вывод:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                    R.layout.books_test_list, title);

R.layout.books_test_list - ново созданный экран с textView
title - ArrayList с данными.

Должно быть примерно так hashmap_object.png

Примеры в интернете используют отдельные классы, тэги и hashMap и т.д. , а у меня просто 2 ArrayList есть.
  • Вопрос задан
  • 4434 просмотра
Подписаться 5 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Alexious_sh
@Alexious_sh
Очевидно, что обычный ArrayAdapter вам уже не подойдет.
Тут как минимум два варианта: писать свой адаптер, расширяя BaseAdapter, либо приводить данные к List<? extends Map>, и использовать SimpleAdapter.
Ответ написан
Комментировать
andreich
@andreich
Все же я предложи написать свой кастомный адаптер.
Что касается двух ArrayList, то я вам предложу сделать свой объект, который будет содержать нужные данные.
Н-р:
public class CustomObject
{
	private String firstValue;
	private String secondValue;
}

где каждый объект содержит i-e строки из обоих ArrayList.

Затем

//создаете вот такой layout 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<?xml version="1.0" encoding="utf-8"?>
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orietation = "horizontal"
     >

    <TextView
        android:id="@+id/textView1"
       	android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </ImageView>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         >
    </TextView>
</LinearLayout>


//затем наследуетесь от ArrayAdapter указав в что в нем будут содержаться ваши кастомные объекты
public class CustomArrayAdapter extends ArrayAdapter<CustomObject>
{
	private final LayoutInflater inflater;
	public CustomArrayAdapter(final Context context, final int textViewResourceId, final ArrayList<CustomObject> objects) 
	{

        super(context, textViewResourceId, objects);
       	inflater = LayoutInflater.from(context);
                               
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
    {
    	if(convertView = null)
    	{
    		//инфлэйтите созданный выше layout
    		convertView = inflater.inflate(R.layout.you_layout_with_two_text_view,null);
    		final ViewHolder holder = new ViewHolder();
    		holder.textView1 = (TextView)convertView.findViewById(R.id.textView1);
    		holder.textView2 = (TextView)convertView.findViewById(R.id.textView2);
    		convertView.setTag(holder);
    	}

    	//ViewHolder - это искуственный прием, чтобы ускорить работу ListView при прокрутке. 
    	//Для эксперимента, можете попробовать создавать 
    	//каждый раз новое View и посмотрите что будет на большом колличестве элементов
    	final ViewHolder holder = (ViewHolder)convertView.getTag();
    	final CustomObject customObj = getItem(position);
    	holder.textView1.setText(customObj.getFirstValue())
    	holder.textView2.setText(customObj.getSecondValue());
    	return convertView;
    }

    private class ViewHolder
    {
    	public TextView textView1;
    	public TextView textView2;
    }

}


все, адаптер готов, можно пихать в него данные и отправлять в ListView
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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