0

您好我想在一個對話框中使用自定義的ArrayList適配器創建一個ListView,以便當我單擊該項目以檢索該對象時。Android CustomAdapter在對話框中的列表視圖

我所做的是後續: 創建在ListView

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

<TextView android:id="@+id/singleItemDialogList" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center_vertical" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentBottom="true" 
    android:textStyle="bold" 
    android:textSize="22dp" 
    android:textColor="#FFFFFF" 
    android:padding="10dp" 
    android:background="#336699" /> 
</LinearLayout> 

我有我的自定義創建自定義佈局的項目在對話框

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<ListView 
    android:id="@+id/dialogListView" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:divider="#b5b5b5" 
    android:dividerHeight="1dp" /> 
</LinearLayout> 

一個ListView元素的佈局適配器

public class AddressBookAdapter extends BaseAdapter { 

private List<AddressBook> objects; 
private LayoutInflater layoutInflater; 

public AddressBookAdapter(Context context, List<AddressBook> objects) { 
    this.objects = objects; 
    layoutInflater = LayoutInflater.from(context); 
} 

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

    if (convertView == null) { 
     convertView = layoutInflater.inflate(R.layout.dialog_list_layout, null); 
     holder = new ViewHolder(); 
     holder.simpleItemDialog = (TextView) convertView.findViewById(R.id.singleItemDialogList); 
     convertView.setTag(holder);   
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.simpleItemDialog.setText(objects.get(position).getAddress()); 
    return convertView; 
} 

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

@Override 
public AddressBook getItem(int position) { 
    // TODO Auto-generated method stub 
    return objects.get(position); 
} 

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

static class ViewHolder { 
    TextView simpleItemDialog; 
} 
} 

最後,我創建dialo G和適配器設置

 final Dialog dialog = new Dialog(this); 
    View view = getLayoutInflater().inflate(R.layout.dialog_list_layout, null); 
    ListView lv = (ListView) view.findViewById(R.id.dialogListView); 
    AddressBookAdapter aba = new AddressBookAdapter(Logged.this, cachedData.getAddressBookList()); 
    Log.w("ABA",""+aba.getCount()); 
    lv.setAdapter(aba); 
    lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      Log.w("CLICK","ITEM"); 

     } 
    }); 
    dialog.setContentView(view); 
    dialog.show(); 

好現在,當我打開對話框我得到的錯誤:NullPointerException異常並指向AddressBookAdapter.getView(38行) - > 38號線:holder.simpleItemDialog.setText(objects.get(position).getAddress());

謝謝

+0

如果你把它放在第38行之前,'objects.get(position)'實際上是否返回一個對象?那個或'getAddress()'返回null很可能是罪魁禍首。 –

+0

是的,我已經通過顯示我擁有的對象的數量來嘗試它,所以對象被填充。 –

+0

嘗試'Log.d(「AddressBookAdapter」,「getAddress()」+ objects.get(position).getAddress());'然後檢查logcat以確保返回的是String而不是null。我沒有看到任何其他代碼部分的問題。 –

回答

0

調試並檢查您的列表是否爲空或包含任何值。您的列表可能爲空。

相關問題