2016-01-10 88 views
1

我试图为我的列表视图做一个自定义数组适配器,但模拟器总是崩溃,我看不到我的代码是好的,它不在哪里。Listview自定义适配器与Imageview和按钮

logcat说“java.lang.OutOfMemoryError”,但我不知道如何解决。我试图修改studio.exe.vmoptions文件或从整个应用程序中删除图像(即使它们只有50x50),而无需付出任何努力。

所以我会发布我的代码,请求您的帮助,以便在我的应用程序中下订单。

预先感谢您!

public class MyClassAdapter extends ArrayAdapter<Plate> { 

private static class ViewHolder { 
    TextView Id; 
    ImageView Image; 
    TextView Name; 
    TextView Description; 
    TextView Type; 
    TextView Cost; 
    TextView Count; 
    TextView Comment; 
    Button Buttonup; 
    Button Buttondown; 
} 

public MyClassAdapter(Context context, int textViewResourceId, ArrayList<Plate> items) { 
    super(context, textViewResourceId, items); 
} 

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

    final Plate item = getItem(position); 
    ViewHolder viewHolder; 
    if (convertView == null) { 
     convertView = LayoutInflater.from(this.getContext()) 
       .inflate(R.layout.item_main, parent, false); 

     viewHolder = new ViewHolder(); 
     viewHolder.Id = (TextView)convertView.findViewById(R.id.code); 
     viewHolder.Image = (ImageView) convertView.findViewById(R.id.image); 
     viewHolder.Name = (TextView) convertView.findViewById(R.id.name); 
     viewHolder.Description = (TextView) convertView.findViewById(R.id.description); 
     viewHolder.Cost = (TextView) convertView.findViewById(R.id.price); 
     viewHolder.Count = (TextView) convertView.findViewById(R.id.count); 
     viewHolder.Buttonup = (Button) convertView.findViewById(R.id.button_up); 
     viewHolder.Buttondown = (Button) convertView.findViewById(R.id.button_down); 



     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 


    if (item!= null) { 
     viewHolder.Id.setText(String.format("%d",item.getId())); 
     viewHolder.Image.setImageURI(item.getImage()); 
     viewHolder.Name.setText(String.format("%s", item.getName())); 
     viewHolder.Description.setText(String.format("%s", item.getDescription())); 
     viewHolder.Name.setText(String.format("%s", item.getName())); 
     viewHolder.Cost.setText(String.format("%s", item.getCost())); 
     viewHolder.Count.setText(String.format("%d", item.getCount())); 
     viewHolder.Buttonup.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       DBHelper mydb= new DBHelper(getContext()); 
       mydb.AddPlate(item.getId()); 
       item.CountUp(); 
       //update viewholder.Count 
      } 
     }); 
     viewHolder.Buttondown.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       DBHelper mydb= new DBHelper(getContext()); 
       mydb.RemovePlate(item.getId()); 
       item.CountDown(); 
       //update viewholder.Count 
      } 
     }); 
    } 
    return convertView; 
} 

这里是我的代码片段调用自定义ArrayAdapter

 ArrayList<Plate> FullMenu; 
     FullMenu = mydb.getPlates("Entrees"); 
     Plate p; 
     int i; 
     MyClassAdapter adapter = new MyClassAdapter(this,0,FullMenu); 
     ListView listView = (ListView) findViewById(R.id.list); 
     listView.setAdapter(adapter); 
     for (i=0; i < FullMenu.size(); i++) { 
      p = FullMenu.get(i); 
      adapter.add(p); 
     } 

回答

0

招setadapter

ArrayList<Plate> FullMenu; 
    FullMenu = mydb.getPlates("Entrees"); 
    Plate p; 
    int i; 
    MyClassAdapter adapter = new MyClassAdapter(this,0,FullMenu); 
    ListView listView = (ListView) findViewById(R.id.list); 
    for (i=0; i < FullMenu.size(); i++) { 
     p = FullMenu.get(i); 
     adapter.add(p); 
    } 
    listView.setAdapter(adapter); 

还我不认为你需要这个,因为你应该读数据来自适配器本身

for (i=0; i < FullMenu.size(); i++) { 
     p = FullMenu.get(i); 
     adapter.add(p); 
    } 

您可以检查此示例我这里有一个适配器 ​​

这里 https://github.com/juangdiaz/CoffeeApp/blob/master/app/src/main/java/com/juangdiaz/coffeeapp/fragments/CoffeeListFragment.java

呼叫转接器让我知道,如果这有助于

+0

我花了最后2个小时尝试设置类Adapter,错误发生在函数的调用中。现在我的小问题是我不能在onclick方法中调用viewholder来实时更新count,但我现在可以尝试一些东西! :) – AlexZ

+0

它有助于剪断我给你吗?或者你仍然有这个问题? –

+0

当然是,没有更多的java.lang.OutOfMemoryError – AlexZ

相关问题