2012-06-26 97 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

可以在圖形編輯器中預覽ListView。只需右鍵單擊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」'添加到XML中的ListView定義中以獲取預覽顯示:) –

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