2012-01-30 2 views
0

Использование preferenceActivity, я создал список с различными форм-устройств , например: 3 строк с флажками 2 с ищут-барыНастройка ListView в Android

Как мы можем настроить элементы списка. В том же виде списка я хочу создать разные элементы, некоторые с флажками, другие с кнопками переключения и так далее.

Любая помощь будет принята с благодарностью.

ответ

2

Чтобы настроить список, чтобы добавить кнопки, которые не являются элементами списка, но часть экрана списка в целом, вы можете, например, создать файл listview.xml, подобный этому (я оставил неважные части) :

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <TextView 
    android:id="@+id/textv" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
(...) 
    /> 

    <Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
(...) 
    /> 

    <Button 
    android:id="@+id/button2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
(...) 
    /> 

    <ListView 
    android:id="@android:id/listv" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
(...) 
    /> 

</RelativeLayout> 

Затем создайте ListView, как это:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    setContentView(R.layout.listview); 

Если вы хотите настроить отдельные элементы сделать следующее, создайте файл, например list_item.xml. В этом примере добавлено изображение с левой стороны и текстовое изображение справа, текстовое представление используется для отображения текста элемента списка. Добавьте кнопки и что вы по вкусу:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 
    <ImageView 
    android:id="@+id/icon" 
    android:padding="4dp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/icon" 
    /> 
    <TextView 
    android:id="@+id/listlabel" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="4dp" 
    android:textSize="16sp" 
    /> 
</LinearLayout> 

В классе ArrayAdapter сделать что-то вроде этого:

class CustArrayAdapter extends ArrayAdapter<String> 
{ 
    CustArrayAdapter() 
    { 
    super(getApplicationContext(), R.layout.list_item, R.id.listlabel, ListActivity.arrayofdata); 
    } 

    public View getView(int position, View convertView, ViewGroup parent) 
    { 
    int mag; 
    char c; 

    View row=convertView; 
    if (row==null) 
    { 
     LayoutInflater inflater=getLayoutInflater(); 
     row=inflater.inflate(R.layout.list_item, parent, false); 
    } 

    TextView label=(TextView)row.findViewById(R.id.listlabel); 
    ImageView icon=(ImageView)row.findViewById(R.id.listicon); 

    label.setText(ListActivity.arrayofdata[position]); 
    label.setTextColor(Color.parseColor("#ff1111")); 
    icon.setImageResource(R.drawable.icon); 

    label.setText(ListActivity.arrayofdata[position]); 

    return (row); 
    } 
} 

Что последний блок кода и делает, кстати, он генерирует элементы ListView «на летать ", когда они прокручиваются в поле зрения. Это существенное улучшение, а не все элементы, которые уже созданы в памяти, и это приведет к быстрому исчерпанию памяти! А на многих устройствах Android память отсутствует.

+0

Спасибо, я понял, но какие изменения я должен сделать, чтобы разрешить разные типы строк в списке, и еще раз спасибо –

+0

Я этого не делал, но я думаю, что в классе CustArrayAdapter() вы можете вы можете выбрать что-то вроде «if arrayofdata [position] .somevalue == anothervalue», затем создайте this_list_item, иначе else_list_item. – aseq