【发布时间】:2015-11-22 16:26:44
【问题描述】:
我有一个 ListView 和一个带有两个元素的简单适配器类。我只想通过单击另一个元素来更改一个元素,但是每当我向下或向上滚动时,更改就会消失。这两个链接我研究过
Why do items disappear when I scroll the listView?
Clickable element in custom ListView row
我知道 listView 具有回收功能,这就是原因,但我想要一个简单的解决方案,而不刷新整个列表,当我要更改多行时,它应该在调用 getView 之后出现,我的意思是在向上或向下滚动之后. 这是我的适配器类代码
public class Pha extends BaseAdapter {
private List<PhaMessages> pList = new ArrayList<PhaMessages>();
private Activity context;
ViewHolder viewHolder = null;
int fCounted = 0;
public Pha(Activity cont, ArrayList<PhaMessages> posts){
this.context = cont;
this.pList = posts;
Log.d("pha","called constructor..");
}
static class ViewHolder {
protected TextView fCount;
protected ImageView fIcon;
}
@Override
public int getCount() {
return pList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
convertView = inflator.inflate(R.layout.pha_list_row, null);
viewHolder = new ViewHolder();
viewHolder.fIcon = (ImageView)convertView.findViewById(R.id.f_counter_img);
viewHolder.fCount = (TextView)convertView.findViewById(R.id.f_plus);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
final ViewHolder hold = viewHolder;
viewHolder.fCount.setText("" + pList.get(position).NumFrnd);
viewHolder.fIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!t){
fCounted++;
hold.fCount.setText(""+fCounted);
// by doing this at list I can see an immediate change that the number is changing
//
//but is i do viewHolder.fCount.setText(""+fCounted); I see another row changing
}else {
Toast.makeText(context,"You have already clcik this.",Toast.LENGTH_SHORT).show();
}
}
});
return convertView;
}
}
提前致谢。
【问题讨论】:
-
您在hold.fCount.setText 中更改的值,同时更新您的arrayList
posts中的值。这样下次视图重新加载时,您将只获得更新的值。 -
谢谢,您能解释一下我应该在哪里进行更改吗?我的意思是,如果我单击多行,那么每次我必须更改“帖子”上的值并调用构造函数来获取更改?
-
您需要在
pList中设置此值,而不是在posts中。您将在hold.fCount.setText的下方onClickListener中调用它
标签: android listview android-listview baseadapter getview