2012-06-26 3 views
2

Существует много сообщений и бесконечное количество вопросов о том, как создать пользовательскую строку и добавить ее в ListView. Тем не менее, все сообщения, которые я нахожу, используют код Java для установки в список настраиваемого файла макета строки. Большинство образцов сделать что-то вроде этого:Пользовательская строка списка в графическом макете ListView

ArrayAdapter<String> adapter = new ArrayAdapter<String> 
    (this,R.layout.row_layout,R.id.text1,colors); 

мне было интересно, если это не способ сделать это в файлах XML непосредственно? Не существует ли свойства в ListView, где вы можете установить собственный файл макета для строк?

Причина, по которой я прошу, заключается в том, что я пытаюсь выполнить все (большинство) моих макетов в инструменте графического макета в Eclipse, и я хотел бы иметь возможность просматривать мои макеты в нем без запуска приложения ,

Несомненно, это должно быть возможно так или иначе? Если бы я мог это сделать в XML, я был бы очень доволен, но если мне нужно написать собственный класс, который будет отображаться в «настраиваемой» части графического редактора макетов, который тоже будет работать.

Большое спасибо за ваше время.

ответ

12

Можно просмотреть ListViews в графическом редакторе. Просто щелкните правой кнопкой мыши ListView и выберите «Содержимое списка предварительного просмотра». Затем выберите «Пользовательский» и выберите собственный макет строки.

Вот пример:

my_custom_list.xml

<ListView android:id="@android:id/list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:drawSelectorOnTop="false"> 
    <!-- Preview: [email protected]/account_list_item --> 
</ListView> 

my_custom_row.xml

<CheckBox 
    android:id="@+id/icon" 

    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 

    android:layout_alignParentTop="true" 
    android:layout_alignParentBottom="true" 
    android:layout_marginRight="6dip" 
    /> 

<TextView 
    android:id="@+id/secondLine" 

    android:layout_width="fill_parent" 
    android:layout_height="26dip" 

    android:layout_toRightOf="@id/icon" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 

    android:singleLine="true" 
    android:ellipsize="marquee" 
    android:text="[email protected]" /> 

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 

    android:layout_toRightOf="@id/icon" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:layout_above="@id/secondLine" 
    android:layout_alignWithParentIfMissing="true" 

    android:gravity="center_vertical" 
    android:text="Account name" /> 

В графическом редакторе my_custom_list.xml щелкните правой кнопкой мыши список. Выберите my_custom_row из параметра «Пользовательский» в «Содержимое списка предварительного просмотра».

+0

Я не уверен, когда он был добавлен, но в Android Studio 0.8.9 я могу добавить 'tools: listitem =" @ layout/account_list_item "в определение ListView в XML, чтобы получить показ предварительного просмотра :) –

1

да, конечно, но в первую очередь необходимо создать класс, который расширяет ArrayAdapter <>

этот класс может быть, как это одна:

public class Mylistcustom extends ArrayAdapter<String> { 

private LayoutInflater mInflater; 
private int mViewResourceId; 
private String[] your_date; 

    public Mylistcustom(Context ctx, int viewResourceId, String[] data) { 

    super(ctx, viewResourceId,data); 
    this.contexto=ctx; 
    mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    mViewResourceId = viewResourceId; 
    this.your_data=data; 



    @Override 
    public int getCount() { 
    return your_data.length; 
} 

@Override 
    public String getItem(int position) { 
    return your_data[position]; 
} 

@Override 
    public long getItemId(int position) { 
    return 0; 
} 

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

    rowView = mInflater.inflate(mViewResourceId, null);// you are inflating your xml layout 
    text=(textView) rowView.findViewById(R.id.textView);//find a textview in your layout, of course you can add whatever you want such as ImaveView Buttons .... 
    text.setText(your_data[position]); // and set text from your_data 
    return rowView; 

} }

и в в режиме просмотра списка вы должны только вызвать конструктор и передать свои данные, макет и контекст

Myadapter = new Mylistcustom(context, R.layout.YOUR_XML_LAYOUT,DATA); 

// and finally set the adapter to your list 
ListView lv = (ListView) findViewById(android.R.id.list); 
lv.setAdapter(Myadapter); 
+0

Спасибо за ваш ответ, к сожалению, это не было, я искал. Я нашел решение и верну его обратно. +1 для попытки :) – span

Смежные вопросы