Я сделал собственный макет для просмотра списка. Макет имеет 2 текстовых вида, одну кнопку и один вид изображения. Когда я раздуваю макет в своем списке, он отлично работает, но когда я прокручиваю вверх и вниз по списку, я проверяю свой лог-кошку и обнаруживаю, что происходит утечка памяти, я не знаю, в чем проблема:Android: просмотр пользовательского списка Утечка памяти
вот LogCat:
06-27 20: 37: 29,321 D/dalvikvm (9034): GC_CONCURRENT освободил 1749K, 16% бесплатно 15831K/18723K, приостановлена 1 мс + 10 мс
06-27 20:37 : 32,451 D/dalvikvm (9034): GC_CONCURRENT освободил 175K, 7% бесплатно 20124K/21475K, остановился 2ms + 18мс
06-27 20: 37: 35,591: D/dalvikvm (9034): GC_CONCURRENT освободил 45K, 5 % бесплатно 25948K/27171K, pau SED 2мс + 12ms
мой код:
l = (ListView) findViewById(R.id.listView1);
CustomAdapter adapter = new CustomAdapter(this,songs);
l.setAdapter(adapter);
CustomAdapter класс:
class CustomAdapter extends ArrayAdapter<String>
{
Context c;
LayoutInflater li;
List<String> names = new ArrayList<String>();
ImageView i;
TextView t1,t2;
Button b;
public CustomAdapter(Context context, List<String> resource)
{
super(context,R.id.textView1, resource);
c = context;
names = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
convertView = li.inflate(R.layout.layout_listview, null);
i = (ImageView) convertView.findViewById(R.id.imageView1);
t1 = (TextView) convertView.findViewById(R.id.textView1);
t2 = (TextView) convertView.findViewById(R.id.textView2);
b = (Button) convertView.findViewById(R.id.button1);
t1.setText(songs.get(position));
t2.setText(songs.get(position));
b.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View arg0)
{
}
});
return convertView;
}
}
Я заменил код выше с этим, но проблема все та же.
public View getView(int position, View convertView, ViewGroup parent)
{
pos = position;
Log.i("in getView",Integer.toString(pos));
//li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
li = LayoutInflater.from(getContext());
View customView = li.inflate(R.layout.layout_listview, parent,false);
i = (ImageView) customView.findViewById(R.id.imageView_filter);
t1 = (TextView) customView.findViewById(R.id.textView1);
t2 = (TextView) customView.findViewById(R.id.textView2);
LinearLayout linearonclick = (LinearLayout) customView.findViewById(R.id.LinearlayoutOnClickListView);
b = (Button) customView.findViewById(R.id.button_eq);
t1.setText(names.get(position));
t2.setText(names.get(position));
linearonclick.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Log.i("in on Click",Integer.toString(pos));
Toast.makeText(getContext(),songs.get(pos), Toast.LENGTH_SHORT).show();
}
});
b.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Toast.makeText(getContext(), "You selected modd Button", Toast.LENGTH_SHORT).show();
}
});
return customView;
}
Посмотрите на http://stackoverflow.com/questions/11387269/listview-gets-out-of-memory-exception-but-with-no-memory-leaks – ditkin