我想要单击 ListView 中的一行并提供按钮以对我在所述行中显示的内容进行基本编辑。现在,我并不是要将文本视图完全更改为可编辑文本视图,而是仅提供诸如“编辑”和“删除”之类的按钮。这可以通过弹出窗口来完成,但我试图避免这种情况,我希望这些操作按钮替换该行的显示内容。
起初我认为它可能只有两种布局来膨胀成行。一个“活跃”,一个正常。单击时,它只会为单击的行返回不同的布局,并有一个标记来指示哪一行是当前选定的行。首先遇到了我没想到的问题,当列表视图向上和向下滚动时,膨胀的视图被回收。好的,好的,所以我对 BaseAdapter 做了一个扩展,这样我就可以用 getView() 做我自己的事情了。好吧,我设法让它正确地允许回收视图(而不是在不应该的地方重用“活动”视图)但是我认为没有办法让它刷新/重新加载备用布局,除非将所述行从屏幕上滚动然后重新打开。似乎没有办法强制 getView() 实际发生,除非一行离开屏幕并回来。
所以这是一个两头的问题。有一种方法可以让单行在显示时换出膨胀的视图?还有两个也许我这样做的方法是一种倒退的方式来完成我想要的,有没有更好的方法?感谢您的时间!
public View getView(int position, View convertView, ViewGroup parent) {
View v;
Boolean activeExists = false;
if(convertView!=null && convertView.getTag()==(String) "active"){
activeExists=true; }
if (((position==activeFlag && activeExists==true) || (position!=activeFlag && activeExists==false)) && convertView!=null) {
v = convertView;
} else if(position==activeFlag && activeExists==false){
v = inflater.inflate(rowlayoutActive, parent, false);
v.setTag((String) "active");
} else if (position!=activeFlag && activeExists==true) {
v = inflater.inflate(rowlayout, parent, false);
} else {
v = inflater.inflate(rowlayout, parent, false);
}
bindView(position, v);
return v;
}
(在这个 getView 之外,我必须(int) activeFlag
记住哪个是当前“选定的”,并且我有自己的 bindView 版本,它与正常情况并没有太大区别。布尔值是已经膨胀的视图的快速标记,以保持错误一个从回收时走错行。)