2012-05-14 53 views
0

我要綁定從Web服務得到了一個自定義列表視圖中的一些數據... 我的ListView有一個ImageView的三個textviews ...綁定對象列表視圖

大多數教程我讀過它表明,一個適配器類應,所以我當前寫入適配器象下面這樣:

public class InboxAdapter extends BaseAdapter { 

    private Context context; 

    private List<MailInbox> mails; 

    public InboxAdapter(Context context, List<MailInbox> mails) 
    { 
     this.context = context; 
     this.mails = mails; 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return mails.size(); 
    } 

    @Override 
    public Object getItem(int item) { 
     // TODO Auto-generated method stub 
     return mails.get(item); 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

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

     MailInbox entry = mails.get(position); 

     if(convertView == null) 
     { 
      LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.mail_list_row, null); 
     } 

     ImageView mailImg = (ImageView)convertView.findViewById(R.list.mail_thumb); 
     //Set the appropriate image - either unread or read 

     TextView author = (TextView)convertView.findViewById(R.list.mail_text); 
     TextView body = (TextView)convertView.findViewById(R.list.mail_detail); 
     TextView date = (TextView)convertView.findViewById(R.list.mail_date); 

     author.setText(entry.AuthorName); 
     body.setText(entry.MessageBody); 
     date.setText(entry.CreatedAt); 

     return convertView; 
    } 
} 

因此,這是這一部分在那裏我卡住了。我現在有一個適配器,但我不完全確定如何使用它...

在有活動Ë列表視圖:

更新:

好了,所以我試圖填補適配器這樣的:

private void setUpList() 
{ 
    list = (ListView)findViewById(R.id.mail_list);  

    final List<MailInbox> mails = new ArrayList<MailInbox>(); 

    for(int i = 0; i < mMessages.myMail.size(); i++) 
    { 
     MailInbox inbox = new MailInbox(); 

     inbox.setProperty(0, mMessages.myMail.get(i).CreatedAt); 
     inbox.setProperty(1, mMessages.myMail.get(i).MessageBody); 
     inbox.setProperty(3, mMessages.myMail.get(i).AuthorName); 
     inbox.setProperty(4, mMessages.myMail.get(i).IsRead);//used to determine the image that will be in the imageview 

     mails.add(inbox); 
    } 

    // Just to check if it's added properly - it outputs 5 
    int length = mails.size(); 
    System.out.println("Size: " + length); 

    InboxAdapter adapter = new InboxAdapter(this, mails); 

    list.setAdapter(adapter); 
} 

但在list.setAdapter(適配器),我得到一個空指針異常

整個錯誤:

05-14 17:43:17.855: E/AndroidRuntime(976): FATAL EXCEPTION: main 
05-14 17:43:17.855: E/AndroidRuntime(976): java.lang.NullPointerException 
05-14 17:43:17.855: E/AndroidRuntime(976): at com.cim.daycare.InboxActivity.setUpList(InboxActivity.java:67) 
05-14 17:43:17.855: E/AndroidRuntime(976): at com.cim.daycare.InboxActivity.access$2(InboxActivity.java:43) 
05-14 17:43:17.855: E/AndroidRuntime(976): at com.cim.daycare.InboxActivity$GetMails.onPostExecute(InboxActivity.java:96) 
05-14 17:43:17.855: E/AndroidRuntime(976): at com.cim.daycare.InboxActivity$GetMails.onPostExecute(InboxActivity.java:1) 
05-14 17:43:17.855: E/AndroidRuntime(976): at android.os.AsyncTask.finish(AsyncTask.java:417) 
05-14 17:43:17.855: E/AndroidRuntime(976): at android.os.AsyncTask.access$300(AsyncTask.java:127) 
05-14 17:43:17.855: E/AndroidRuntime(976): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 
05-14 17:43:17.855: E/AndroidRuntime(976): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-14 17:43:17.855: E/AndroidRuntime(976): at android.os.Looper.loop(Looper.java:123) 
05-14 17:43:17.855: E/AndroidRuntime(976): at android.app.ActivityThread.main(ActivityThread.java:3683) 
05-14 17:43:17.855: E/AndroidRuntime(976): at java.lang.reflect.Method.invokeNative(Native Method) 
05-14 17:43:17.855: E/AndroidRuntime(976): at java.lang.reflect.Method.invoke(Method.java:507) 
05-14 17:43:17.855: E/AndroidRuntime(976): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
05-14 17:43:17.855: E/AndroidRuntime(976): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
05-14 17:43:17.855: E/AndroidRuntime(976): at dalvik.system.NativeStart.main(Native Method) 

從做了一些Google'ing的,這聽起來像問題米飛行說謊與XML的文件... 我有兩個XML的,一個叫mail_list和一個叫mail_list_row ...

列表:

<?xml version="1.0" encoding="utf-8"?> 
<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mail_list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_weight="2" 
    android:drawSelectorOnTop="false" >  
</ListView> 

行:

<?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="48dip" 
    android:background="@drawable/listselector" 
    > 
    <ImageView 
     android:id="@+list/mail_thumb" 
     android:layout_width="30dip" 
     android:layout_height="30dip" 
     android:layout_centerVertical="true" 
     android:layout_alignParentLeft="true" 
     android:contentDescription="@string/imgdesc" 
     /> 
    <TextView 
     android:id="@+list/mail_text" 
     android:layout_toRightOf="@+list/mail_thumb" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="14dip" 
     android:layout_marginLeft="8dip" 
     android:layout_centerVertical="false" 
     android:singleLine="true" 
     android:ellipsize="end" 
     android:textStyle="bold" 
     android:textColor="@android:color/white" 
     /> 
    <TextView 
     android:id="@+list/mail_detail" 
     android:layout_toRightOf="@+list/mail_thumb" 
     android:layout_below="@+list/mail_text" 
     android:layout_width="100dip" 
     android:layout_height="wrap_content" 
     android:textSize="12dip" 
     android:layout_marginLeft="8dip" 
     android:layout_centerVertical="false" 
     android:singleLine="true" 
     android:ellipsize="end" 
     android:textColor="@color/grey"  
     /> 
    <TextView 
     android:id="@+list/mail_date" 
     android:layout_toRightOf="@+list/mail_detail" 
     android:layout_below="@+list/mail_text" 
     android:layout_width="100dip" 
     android:layout_height="wrap_content" 
     android:textSize="12dip" 
     android:singleLine="true" 
     android:ellipsize="end" 
     android:textColor="@color/grey" 
     android:layout_alignParentRight="true"  
     /> 
</RelativeLayout> 

回答

1

嘗試像

private void setUpList() 
{ 
    list = (ListView)findViewById(R.id.mail_list); 
    InboxAdapter adapter=new InboxAdapter(this,YourArrayList); 
    list.setAdapter(adapter); 
} 
+0

ZAZ廣明源,好了,所以這看起來是正確的,但我有填充ArrayList時遇到一些麻煩......我已經更新了我的主要問題,如何獲取數據,也許您可​​以發現我的錯誤... – user1368800

+0

我認爲這mMessages.myMail.get(i).AuthorName返回一個字符串。使用MailInbox inbox = new MailInbox();然後inbox.setAuthorName(mMessages.myMail.get(i).AuthorName); inbox.setMessageBody(mMessages.myMail.get(i).MessageBody)和soo on.and last statement is mails.add(inbox); –

+0

Zaz Gmy,我真的很感激你的幫助,至今...我認爲它接近於工作...我已經成功地添加了數據,但是當代碼到達.setAdapter時,它會與Nullpointer異常崩潰...我已經檢查列表包含數據,並且它包含5個對象... – user1368800

0

在setUpList方法將您想要使用的數據傳遞給適配器。

構造函數然後將它們的集合分配給適配器中的集合。該getView然後再換的相關數據(1 1),並把它放在你的觀點正確的元素