2013-09-24 42 views
1

我已經使用線性佈局(如下所示)來顯示列表視圖中的數據。我怎麼能實現這個?通過使用下面的代碼,我得到空白listview,不知道爲什麼! 下面是列表視圖項如何在列表中顯示數據,但使用字符串?

Listview Items

這是我使用

public class ListAdapter extends BaseAdapter { 

private LayoutInflater mInflater; 
private Context context; 
private ArrayList<Data> friendListData; 

private class ViewHolder { 
    public TextView name; 
    public ImageView pro_image; 

    public TextView comment; 

} 

public ListAdapter(Context context, ArrayList<Data> friendDataList) { 
    // TODO Auto-generated constructor stub 
    super(); 
    this.friendListData = friendDataList; 
    this.context = context; 

} 

// @Override 
public int getCount() { 
    return friendListData.size(); 
} 

// @Override 
public Object getItem(int position) { 
    return position; 
} 

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

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

    ViewHolder holder = null; 

    mInflater = (LayoutInflater) context 
      .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

    if (convertView == null) { 

     convertView = mInflater.inflate(R.layout.conversation_item, null); 

     holder = new ViewHolder(); 
     holder.name = (TextView) convertView.findViewById(R.id.name); 
     holder.comment = (TextView) convertView.findViewById(R.id.comment); 
     holder.pro_image = (ImageView) convertView.findViewById(R.id.avatarPic); 
     convertView.setTag(holder); 

    } 
    else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    Data data = (Data) getItem(position); 

    holder.name.setText(data.getName()); 
    holder.comment.setText(data.getComment()); 
    holder.pro_image.setImageResource(data.getPro_image()); 

    return convertView; 
} 


public class Data { 
String name; 
String comment; 
int pro_image; 

    } 
    } 

和MainActivity.java的代碼,我使用的適配器這樣

lv = (ListView) findViewById(R.id.ListView); 
    friendsDataList = new ArrayList<Data>(); 
    adapter = new ListAdapter(MainActivity.this, friendsDataList); 

    lv.setAdapter(adapter); 
+1

到目前爲止,你已經嘗試過什麼,你都面臨着哪些問題? –

+0

我已經使用適配器,但不能滿足要求 – Nidhi

+0

後烏爾代碼笏有你試過 –

回答

1

你需要檢查你的ArrayList大小像...

Log.i("====SIZE=======","======>"+friendsDataList.size()); 
adapter = new ListAdapter(MainActivity.this, friendsDataList); 

聲明中不同類的數據。

public class Data { 
String name; 
String comment; 
int pro_image; 
    } 

在你的ArrayList測試用的像添加值..

Data data=new Data(); 
data.name="nidhi"; 
data.comment="Android developer"; 

friendDataList.add(data); 

Data data=new Data(); 
data.name="Hardy"; 
data.comment="Android developer. Ready to help you."; 

friendDataList.add(data); 

這一行之前:

adapter = new ListAdapter(MainActivity.this, friendsDataList); 
+0

它解決了我的問題..謝謝哈迪.. :) – Nidhi

+1

不客氣。很高興再次幫助你。 :)快樂codding。 –

+0

這是不正確的。在設置適配器之前,您不必添加項目,只要您仍然在消息隊列的相同迭代中工作即可。實際上,如果您還調用notifyDatasetChanged(),您甚至可以在消息隊列的下一次迭代中添加項目。我完全不知道如何解釋這是正確的答案。我甚至被壓低了。 –

0

創建自定義適配器使用BaseAdapter或SimpleAdapter並重寫getView方法。設計像你想顯示和使用BaseAdapter clickhere

-1

要創建一個自定義的ListView項,你應該誇大它getview方法

對於詳細的教程行XML文件延伸的適配器類(我建議你BaseAdapter類)和方法getView(...)實例化您的佈局。

一個很好的例子,與所述圖案ViewHolder(這與ArrayAdapter)

http://www.jmanzano.es/blog/?p=166

一種這裏其他與BaseAdapter

http://qtcstation.com/2012/04/a-limitation-with-the-viewholder-pattern-on-listview-adapters/

Aclaration。模式ViewHolder使你的列表視圖平滑,因爲findViewById方法的使用非常非常慢。與視圖持有人,你避免使用它,只有在正確的時刻

1

觀看「the world of listView」由谷歌講座。

總之,你需要做的是:

  1. 創建將作爲各行的模板一個佈局XML。根據數據爲每個視圖設置一個ID,以便其數據需要更改。

  2. 延伸BaseAdapter並執行getView()根據數據中的位置顯示該項目,並getCount()獲取行數。您可以實施getItem()以從數據中獲取項目。

    記得以有效的方式實現getView()方法,如演講中所示(如果不是null,則使用convertView,也可使用ViewHolder「設計模式」)。

  3. 設置您創建的類的新實例作爲listView的適配器。

就是這樣。

有很多關於如何在互聯網上做的例子,即使在API演示中也是如此。

雖然理解你在做什麼更重要。

+0

嗨。我正在使用上面的代碼。但不知道錯誤在哪裏。能否請你幫忙? – Nidhi

+1

@Nidhi大部分代碼都可以。我發現這是有問題的是,getItem()你返回的位置,而不是數據本身。你應該已經返回friendListData.get(position)。您也可以將返回的類型更改爲「Data」,以便您不需要將其轉換爲getView()方法。只是一些額外的提示:你永遠不需要調用super()。你永遠不需要刪除/註釋「@Override」註釋。你可以在構造函數中而不是在getView()方法中設置inflater。最後提示:考慮更改類名或將其與活動 –

+0

放在同一包中另一個提示:如果您希望在UI設計器中看到帶有行的列表視圖,則可以在listView標記中添加它的xml屬性:工具:listitem =「@ layout/your_listview_item_row」,或右鍵單擊UI設計器中的listView並選擇「預覽列表內容」並選擇行的佈局。 –

0

設置適配器,如:

 public class AdptrSchedules extends BaseAdapter { 
private ArrayList<Model> aList; 
private Activity activity; 
private LayoutInflater layoutinflater; 

public AdptrSchedules(ArrayList<Model> modelValues, Activity activity) { 
    super(); 
    this.aList = modelValues; 
    this.activity = activity; 

} 

@Override 
public int getCount() { 

    return aList.size(); 
} 

@Override 
public Object getItem(int position) { 

    return aList.get(position); 
} 

@Override 
public long getItemId(int position) { 

    return position; 
} 

public void setPositionSelected(int position) { 

    this.notifyDataSetChanged(); 
} 

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

    layoutinflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    ViewHolder holder = null; 
    Model model = aList.get(position); 
    // ModelTemp employeeLocalDataModel = aListStudent.get(position); 
    if (convertView == null || !(convertView.getTag() instanceof ViewHolder)) { 
     convertView = layoutinflater.inflate(R.layout.row, null); 
     holder = new ViewHolder(); 
     holder.txt = (TextView) convertView.findViewById(R.id.row_txt_name); 

     holder.imgPhoto = (ImageView) convertView.findViewById(R.id.row_serch_img_photo); 

     convertView.setTag(holder); 
     convertView.setTag(R.id.row_serch_txt_name, holder.txtName); 

     convertView.setTag(R.id.row_serch_img_photo, holder.imgPhoto); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.txtArtistName.setText("" + model.getNAME()); 

    holder.txtDay.setText("" + scheduleDay); 
    // holder.imgPhoto.setChecked(aListMalls.get(position).isSelected()); 

    return convertView; 
} 

class ViewHolder { 
    TextView txtName; 

    ImageView imgPhoto; 
} 

    } 
0

它爲我工作

創建list_layout.xml並把它傳遞給ListView控件適配器

private static class ListViewAdapter extends BaseAdapter { 
    private LayoutInflater mInflater; 

    public ListViewAdapter(Context context) { 

     mInflater = LayoutInflater.from(context); 

    } 

    public int getCount() { 
     return ListviewContent.size(); 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

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

     ListContent holder; 

     if (convertView == null) { 
      convertView = mInflater 
        .inflate(R.layout.list_layout, null); 

      holder = new ListContent(); 
      holder.text = (TextView) convertView 
        .findViewById(R.id.TextView01); 


      convertView.setTag(holder); 
     } else { 

      holder = (ListContent) convertView.getTag(); 
     } 

     holder.text.setText(ListviewContent.get(position)); 


     return convertView; 

    } 

    static class ListContent { 
     TextView text; 



    } 
} 

設計佈局,只要你想,終於將其設置爲列表視圖

setListAdapter(new ListViewAdapter(this)); 
0

您可以在UI設計器空間中右鍵單擊listView並選擇「預覽列表內容」。現在,選擇您想要在listView中顯示的佈局內容。它會讓你知道你的內容在listView中的樣子。

相關問題