我有一个带有ImageView的自定义Listview用于绘图。在我的Mainactivity中,我开始一个线程,每隔20ms在我的Listview中重绘一次ImageView。 只在我的Listfragment中调用 adapter.notifyDataSetChanged(); 时,才会刷新ImageView。 这工作正常,但我的问题是,onListItemClick有时在这种情况下会触发。当我删除adapter.notifyDataSetChanged()时,onListItemClick总是会激活但是现在,我的ImageViews不会刷新。
这是我的代码的重要部分:
public class FragmentOscilloscope extends ListFragment
{
private ListViewAdapter adapter;
private List<ListViewItem> rowItems;
private Handler sampleUpdateHandler = null;
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
sampleUpdateHandler = new Handler();
}
public void InitFragment()
{
adapter = new ListViewAdapter(getActivity(), rowItems);
setListAdapter(adapter);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id)
{
super.onListItemClick(l, v, position, id);
Log.d("FragmentOscilloscope", "onListItemClick");
}
public void UpdateOscilloscope(final PositionMarker pos)
{
for (int i = 0; i < listItems; i++);
{
Canvas canvas = rowItems.get(i).getCanvas();
// do the drawings
}
sampleUpdateHandler.post(new Runnable()
{
@Override
public void run()
{
adapter.notifyDataSetChanged();
}
});
}
}
这是我的ListViewAdapter中的getView():
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ListViewItem row_pos = rowItem.get(position);
if (convertView == null)
{
convertView = mInflater.inflate(R.layout.oscilloscope_list_item, parent, false);
}
imageView = (ImageView) convertView.findViewById(R.id.osc_image);
imageView.setImageBitmap(row_pos.getBitmap());
row_pos.setImageView(imageView);
return convertView;
}
有人可以帮我吗?我真的很沮丧......谢谢!
您还可以在此处找到所描述行为的完整代码: Android ListFragment update/refresh and onItemClick
答案 0 :(得分:1)
当我删除adapter.notifyDataSetChanged()时,onListItemClick总会立即触发,但我的ImageViews不会刷新。
当您致电var date = moment();
date.toISOString();
时,notifyDataSetChanged()
中的项目将会初始化并再次绘制。导致listview
触发的主要原因是因为当时你的UI线程非常繁忙,它正在处理其他任务,并且onListItemClick命令将被放在任务队列上进行处理。
我想在onListItemClick
来自getView()
你执行非常繁重的任务,尝试改进它或为繁重的进程创建adapter
。希望它有所帮助。
任何方式,如果您在代码中提供更多详细信息(Thread/AsynTask
是一个好点),我认为有些人可以提供很多帮助。