2012-12-03 51 views
2

创建自定义的ListView我想有一个自定义的ListView,所以我这样做:UnsupportedOperationException异常在Android的

创建了一个活动:

public class PRS_MainList_Act extends ListActivity { 
    MainListAdapter mladp; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_prs__main_list_); 
     ArrayList<MainMenuItem> menuItems = new ArrayList<MainMenuItem>(); 
     menuItems.add(new MainMenuItem(getResources().getString(R.string.main_list_connectivity), getResources().getString(R.string.main_list_connectivityDesc))); 
     this.mladp = new MainListAdapter(this, R.layout.man_list_item, R.id.textView1, menuItems); 
     setListAdapter(mladp); 

    } 
} 

创建菜单项的类:

public class MainMenuItem { 

    private String itemText; 
    private String itemDescription; 
    private String itemIMG; 
    private int itemWeight; 
    private String itemAssociatedActivity; 

    public MainMenuItem(String itemText, String itemDescription) { 
     this.itemText = itemText; 
     this.itemDescription = itemDescription; 
    } 

    public String getItemText() { 
     return itemText; 
    } 
    public void setItemText(String itemText) { 
     this.itemText = itemText; 
    } 
    public String getItemIMG() { 
     return itemIMG; 
    } 
    public void setItemIMG(String itemIMG) { 
     this.itemIMG = itemIMG; 
    } 
    public int getItemWeight() { 
     return itemWeight; 
    } 
    public void setItemWeight(int itemWeight) { 
     this.itemWeight = itemWeight; 
    } 
    public String getItemAssociatedActivity() { 
     return itemAssociatedActivity; 
    } 
    public void setItemAssociatedActivity(String itemAssociatedActivity) { 
     this.itemAssociatedActivity = itemAssociatedActivity; 
    } 

    public String getItemDescription() { 
     return itemDescription; 
    } 

    public void setItemDescription(String itemDescription) { 
     this.itemDescription = itemDescription; 
    } 

} 

定制阵列适配器:

public class MainListAdapter extends ArrayAdapter<MainMenuItem> { 

    ArrayList<MainMenuItem> menuItems; 

    public MainListAdapter(Context context, int resource, 
      int textViewResourceId, ArrayList<MainMenuItem> menuItems) { 
     super(context, resource, textViewResourceId, menuItems); 
     this.menuItems = menuItems; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     if (convertView == null) { 
      LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
        Context.LAYOUT_INFLATER_SERVICE); 
      view = vi.inflate(R.layout.man_list_item, parent); 
     } 
     MainMenuItem it = menuItems.get(position); 
     if (it != null) { 
      TextView titleTV = (TextView) view.findViewById(R.id.textView1); 
      TextView descriptionTV = (TextView) view.findViewById(R.id.textView2); 
      ImageView iconIV = (ImageView)view.findViewById(R.id.imageView1); 
      if (titleTV != null) { 
       titleTV.setText(it.getItemText()); 
      } 
      if(descriptionTV != null){ 
       descriptionTV.setText(it.getItemDescription()); 
      } 
      if(iconIV != null){ 
       if(it.getItemText().equals(getContext().getResources().getString(R.string.main_list_connectivity))) 
        iconIV.setImageResource(R.drawable.network_connections); 
      } 
     } 
     return view; 
    } 

} 

,这里是我的活动布局和项目布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".PRS_MainList_Act" > 
    <ListView android:id="@android:id/list" 
     android:layout_height="match_parent" 
     android:layout_width="match_parent"/> 

</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="horizontal" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:src="@drawable/ic_launcher" /> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:text="Medium Text" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:text="TextView" /> 

    </LinearLayout> 

</LinearLayout> 

我得到这个错误说:java.lang.UnsupportedOperationException:addView(查看,的LayoutParams)不支持in AdapterView

在此先感谢您的帮助。

+0

你可以请包括完整的堆栈跟踪? –

+0

亚当,Luksprog解决方案工作。是否有必要包含完整的堆栈跟踪? – Mahyar

+0

我想不到。 –

回答

5

不能使用这个版本的inflate方法:

view = vi.inflate(R.layout.man_list_item, parent); 

,因为这将充气View添加到父,这是不是在允许ListView。使用此版本:

view = vi.inflate(R.layout.man_list_item, parent, false); 

这将膨胀视图,但不会将其添加到父级。此版本非常重要,因为它将为您的充气视图提供适当的LayoutParams

+0

知府!有效。万分感谢。 – Mahyar

相关问题