从listView中选择项目时,我会更改其数据并调用notifyDataSetChanged。
由于它是相同的listView,当我单击该项时,效果将保留在notifyDataSetChanged之后将使用的视图。
这在Android Lollipop上尤为明显,在使用新数据刷新listView后,纹波可以继续。
以下是显示问题的示例代码:
public class MainActivity extends ActionBarActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView=(ListView)findViewById(R.id.listView);
listView.setAdapter(new BaseAdapter()
{
int pressCount=0;
@Override
public int getCount()
{
return 100;
}
@Override
public Object getItem(int position)
{
return null;
}
@Override
public long getItemId(int position)
{
return 0;
}
@Override
public View getView(int position,View convertView,ViewGroup parent)
{
View rootView=convertView;
if(rootView==null)
{
rootView=LayoutInflater.from(MainActivity.this).inflate(android.R.layout.simple_list_item_1,parent,false);
rootView.setBackgroundResource(getResIdFromAttribute(MainActivity.this,android.R.attr.selectableItemBackground));
rootView.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
pressCount++;
notifyDataSetChanged();
}
});
}
TextView tv=(TextView)rootView;
tv.setText("text:"+(pressCount+position));
return rootView;
}
});
}
public static int getResIdFromAttribute(final Activity activity,final int attr)
{
if(attr==0)
return 0;
final TypedValue typedvalueattr=new TypedValue();
activity.getTheme().resolveAttribute(attr,typedvalueattr,true);
return typedvalueattr.resourceId;
}
}
如何暂时停止选择效果,直到下次在listView上点击任何内容(但也会在下次用户点击某个项目时恢复允许它)?
答案 0 :(得分:2)
ViewCompat.jumpDrawablesToCurrentState(view);
奇怪的是,只有当我通过Handler.post(...)调用它时,它才适用于我。
不知道为什么(因为视图已经在动画期间),以及是否有更好的解决方案。