tim*_*yau 18 android listview android-listview
这是因为它仅在某些手机中发生,因为它们的分辨率是FHD.
当显示UI时,一切似乎都可以.当我单击项目并调用notifyDataSetChanged()时,item不会刷新它的外观.我需要再次点击ListView,项目将刷新布局到正确的外观.
如果listview改变大小(例如:搜索功能将重新设计整个布局),一切都会变好.
这是ListView代码:
public final class MyListView extends ListView implements AdapterView.OnItemClickListener
{
ArrayList<SELECT_ITEM> selectList;
ArrayList<ID_ITEM> idList;
ShowItemAdapter showAdapter;
public MyListView(Context context)
{
selectList = new ArrayList<SELECT_ITEM>();
idList = new ArrayList<ID_ITEM>();
readIdList(mIdList);
showAdapter = new ShowItemAdapter(context, idList, selectList);
setAdapter(showAdapter);
...
}
@Override
protected void onFinishInflate() {
setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long ID) {
boolean itemIsSelected = true;
int size = selectList.size();
// remove if click item in selectList
for(int i=0 ; i<size ; i++) {
int selectID = selectList.get(i).id;
if (idList.get(position).id == selectID) {
itemIsSelected = false;
selectList.remove(i);
showAdapter.notifyDataSetChanged();
break;
}
}
if (itemIsSelected) {
SELECT_ITEM item = new SELECT_ITEM();
item.id = idList.get(position);
selectList.add(item);
// Here
showAdapter.notifyDataSetChanged();
}
...
}
....
}
Run Code Online (Sandbox Code Playgroud)
这是适配器代码,
public final class ShowItemAdapter extends BaseAdapter{
public ArrayList<ID_ITEM> mIdList;
public ArrayList<SELECT_ITEM> mSelectList;
public ShowItemAdapter(Context context,
ArrayList<ID_ITEM> idList,
ArrayList<SELECT_ITEM> selectList)
{
mIdList = idList;
mSelectList = selectList;
}
@Override
public int getCount() {
int ret = mIdList.size();
return ret;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
...
for(int i=0 ; i<size ; i++)
{
// is selected
if (mIdList.get(position).id ==
selectList.get(i).id)
{
mIsSelected = true;
break;
}
}
if (mIsSelected)
{
textView.setBackgroundColor(Color.red);
}
else
{
textView.setBackgroundColor(Color.white);
}
}
}
Run Code Online (Sandbox Code Playgroud)
有人帮我一把吗?
我发现在getView()调试暂停时,这些手机正常工作会导致同样的问题.我认为......就像"视图已经更新,所以它不会刷新视图." 但是在调试期间更新视图会使ui实际上不刷新,然后它以错误的方式工作.
我想这是关于令人耳目一新的观点.
tim*_*yau -1
我找到了一个解决方案,尽管它仍然可以解决一些问题。
我在 Activity.onCreate() 中调用下面的方法,并且只有在 onInit() 中 MyListView 才会被初始化:
postDelayed(new Runnable()
{
public void run()
{
onInit(icicle); // initial ui
}
}, 100);
Run Code Online (Sandbox Code Playgroud)
它使视图显示速度变慢但工作正常。
如果延迟100毫秒左右,可能会导致那些工作正常的手机变成坏手机。大约350毫秒的延迟使得两款手机都运行良好。有更好的答案吗?
| 归档时间: |
|
| 查看次数: |
916 次 |
| 最近记录: |