2016-12-28 25 views
0

在android中,我想創建一個ListView,每個項目是3個textviews。當我運行我的程序時,它顯示一個白頁(空列表)。作爲一名初學者,我不確定我做錯了什麼。添加多個Textviews作爲一個ListView項目

下面是我的自定義適配器和自定義對象類。

class CustomObject { 

    private String title; 
    private String date; 
    private String body; 

    public CustomObject(String prop1, String prop2, String prop3) { 
     this.title = prop1; 
     this.date = prop2; 
     this.body=prop3; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public String getDate() { 
     return date; 
    } 

    public String getBody(){ 
     return body; 
    } 

} 


public class CustomAdapter extends BaseAdapter { 

    private LayoutInflater inflater; 
    private ArrayList<CustomObject> objects; 
    private Activity activity; 

    private class ViewHolder { 
     TextView titleTextView; 
     TextView dateTextView; 
     TextView bodyTextView; 
    } 


    public CustomAdapter(Context context, ArrayList<CustomObject> objects, Activity activity) { 
     super(); 
     inflater = LayoutInflater.from(context); 
     this.objects = objects; 
     this.activity= activity; 
    } 

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

    @Override 
    public CustomObject getItem(int position) { 
     return objects.get(position); 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     if(convertView == null) { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.activity_listview, null); //NOT SURE 


      holder.titleTextView = new TextView(activity); 
      //holder.titleTextView.setText(titleList.get(i)); 
      holder.titleTextView.setTextSize(14); 
      holder.titleTextView.setTypeface(holder.titleTextView.getTypeface(), Typeface.BOLD); //title in bold 
      holder.titleTextView.setGravity(Gravity.RIGHT); 


      holder.dateTextView = new TextView(activity); 
      //tvDate[i].setText(dateList.get(i)); 
      holder.dateTextView.setTextSize(14); 
      holder.dateTextView.setTypeface(holder.dateTextView.getTypeface(), Typeface.ITALIC); //Date in ITALIC 
      holder.dateTextView.setGravity(Gravity.RIGHT); 

      holder.bodyTextView = new TextView(activity); 
      //holder.bodyTextView.setText(textList.get(i)); 
      holder.bodyTextView.setTextSize(14); 
      holder.bodyTextView.setGravity(Gravity.RIGHT); 


      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.titleTextView.setText(objects.get(position).getTitle()); 
     holder.dateTextView.setText(objects.get(position).getDate()); 
     holder.bodyTextView.setText(objects.get(position).getBody()); 
     return convertView; 
    } 


} 

下面是創建並顯示ListView控件的方法

private void displayNews() 
    { 

     ListView listView = new ListView(activity); 
     //listView.setLayoutParams(); 


     ArrayList<CustomObject> objects = new ArrayList<CustomObject>(); 
     for(int i=0; i<titleList.size(); i++) 
      objects.add(new CustomObject(titleList.get(i), dateList.get(i),textList.get(i))); 
     CustomAdapter customAdapter = new CustomAdapter(activity, objects, activity); 
     listView.setAdapter(customAdapter); 


     //THE WHOLE VIEW 
     ScrollView sv = new ScrollView(activity); 
     LinearLayout ll = new LinearLayout(activity); 
     ll.setOrientation(LinearLayout.VERTICAL); 
     ll.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT)); 
     ll.setGravity(Gravity.RIGHT); 

     ll.addView(listView,LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); //adding 


     sv.addView(ll);//adding the layout view to the scorllable view 
     activity.setContentView(sv);//adding the scrollable view to the activity :) 

    } 

下面是activity_listview.xml

<?xml version="1.0" encoding="utf-8"?> 
<!-- Single List Item Design --> 

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/label" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dip" 
    android:textSize="16dip" 
    android:textStyle="bold" 
    android:gravity="right"> 
</TextView> 
+0

嘗試在xml中添加全部三個textview並在適配器類中獲取參考。不要創建新的textview – Anjali

回答

1

變化activity_listview.xml例如像以下:

該膨脹的視圖和初始化 ViewHolder實例
<?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="fill_parent" > 
    <TextView 
     android:id="@+id/txtTitle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="10dip" 
     android:textSize="16dip" 
     android:textStyle="bold"> 
    </TextView> 
    <TextView 
     android:id="@+id/txtDate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="10dip" 
     android:textSize="16dip"> 
    </TextView> 
    <TextView 
     android:id="@+id/txtBody" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="10dip" 
     android:textSize="16dip"> 
    </TextView> 
</LinearLayout> 

更改代碼:

holder = new ViewHolder(); 
convertView = inflater.inflate(R.layout.activity_listview, null); 

holder.titleTextView = (TextView) convertView.findViewById(R.id.txtTitle); 
holder.dateTextView = (TextView) convertView.findViewById(R.id.txtDate); 
holder.bodyTextView = (TextView) convertView.findViewById(R.id.txtBody); 

注意R.id.txtTitleR.id.txtDateR.id.txtBody對應於android:id="@+id/txtTitle"android:id="@+id/txtDate"android:id="@+id/txtBody"在佈局文件(activity_listview.xml)中。

更新:

我的編輯排版文件。您可以嘗試使用Android Studio中的GUI設計佈局。

+0

有一個改進,但現在我只能看到一行,這是第一個元素的標題。 –

+0

我同意XML設計需要修復,但仍然只有第一個項目。代碼中的某些內容需要更新/添加。你能檢查嗎? –

+0

我修復了版面設計。現在,問題是隻有1個項目顯示在列表中。 –

0

如果要動態創建文本的意見,所以你必須添加他們查看組。 到你和你的ListView在這一行做了什麼類似:

ll.addView(listView,LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); //adding 

只要創建新的ViewGroup(LinearLayout中,相對佈局等),並添加您textviews。

希望它有幫助!