2015-04-02 51 views
0

我想自定義ListView顯示圖像列表,所以我寫了下面的代碼,但不幸的是它不工作。ListView的圖像不工作

佈局/ menu.xml文件

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent" android:background="@drawable/menu_bg"> 
    <ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/name" 
    android:layout_gravity="center"/> 

    <ListView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/menu_list" 
    android:layout_gravity="center" 
    android:layout_marginTop="60sp"></ListView> 
</LinearLayout> 

佈局/ menu_item.xml

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

Menu.java

public class Menu extends Activity{ 


private int[] items = {R.drawable.res_opt, R.drawable.new_game_opt, R.drawable.score_opt, R.drawable.exit_opt}; 
ListView list; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.menu); 
    list = (ListView) findViewById(R.id.menu_list); 
    list.setAdapter(new MenuAdapter(Menu.this, items)); 
} 
} 

MenuAdapter.java

public class MenuAdapter extends ArrayAdapter{ 

private int[] items; 
private Context context; 

public MenuAdapter(Context context, int[] items) { 
    super(context, R.layout.menu_item); 
    this.context = context; 
    this.items = items; 
} 



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

    //make sure we have a view to work with 
    View itemView = convertView; 
    if(itemView == null) 
    { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     itemView = inflater.inflate(R.layout.menu_item,null, true); 
    } 
     //Find the object to work with 
     int id = items[position]; 

     //Fill the view 
     ImageView item = (ImageView) itemView.findViewById(R.id.item); 
     item.setImageResource(id); 

    return itemView; 

} 

} 
+0

你有沒有試過用 「ItemView控件= inflater.inflate(R.layout.menu_item,父母,真);」 ? – Vink 2015-04-02 10:57:15

+0

重寫getCount()並返回其中的數組大小。 – Manoj 2015-04-02 10:58:01

+0

yup 1st我試過@Vink – 2015-04-02 11:01:47

回答

0

添加視圖持有者類代碼,因爲它的不完整的。現在

public class ViewHolder{ 
     public ImageView iv; 
    } 

,你的代碼看起來就像這樣:

ViewHolder mViewHolder = new ViewHolder(); 
if(itemView == null){ 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    itemView = inflater.inflate(R.layout.menu_item,null, null); 
    mViewHolder.iv = (ImageView) itemView.findViewById(R.id.item); 
    itemView.setTag(mViewHolder); 
}else{ 
    mViewHolder = (ViewHolder) itemView.getTag(); 
} 
//Find the object to work with 
int id = items[position]; 
//Fill the view 
mViewHolder.iv.setImageResource(id); 

而且,你已經錯過了你將大小的ListView適配器。

希望,這可以幫助你。

+0

結果仍然是相同的 – 2015-04-02 11:28:35

0

您需要使用ArrayAdapter的另一個超級構造函數。

public class MenuAdapter extends ArrayAdapter<Integer>{ 

private Integer[] items; 
private Context context; 

public MenuAdapter(Context context, Integer[] items) { 
    super(context, R.layout.menu_item, items); 
    this.context = context; 
    this.items = items; 
} 

編輯

而且解決這一行

itemView = inflater.inflate(R.layout.menu_item,parent, false); 
+0

通過添加項目它說:「無法解析方法超級(android.context.Context,int,int [])」 – 2015-04-02 11:08:45

+0

@IqraRana更正了我的答案。 http://developer.android.com/reference/android/widget/ArrayAdapter.html ArrayAdapter是一個泛型類,你需要定義它的類型。 – 2015-04-02 11:16:09

+0

我編輯它,但結果是一樣的 – 2015-04-02 11:26:36