我创建了一个ListView,每行都有一个带有向上和向下箭头的按钮。按下这些按钮可以将该行向上或向下移动一个位置。在ArrayAdapter中交换两行
我已经通过在覆盖方法getView中实现两个按钮的OnClickListener来实现它。它的工作原理应该如此,但我填写糟糕的是,这似乎是高度消耗内存,许多代码翻了一番。
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View rowView = inflater.inflate(R.layout.row_layout, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.label);
CheckBox checkBox = (CheckBox) rowView.findViewById(R.id.checkbox);
checkBoxes.add(position, checkBox);
String address = this.getItem(position).getAddress();
String tokenizedAddress = tokenizeAddress(address);
textView.setText(tokenizedAddress);
ImageButton buttonUp = (ImageButton)rowView.findViewById(R.id.button_up);
ImageButton buttonDown = (ImageButton)rowView.findViewById(R.id.button_down);
buttonUp.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
ListAdapter adapter = ListAdapter.this;
if(position != 0){
GameTask current = adapter.getItem(position);
ArrayList<GameTask> list = new ArrayList<GameTask>();
for(int i = 0; i < adapter.getCount(); i++)
list.add(adapter.getItem(i));
list.remove(position);
list.add(position-1, current);
adapter.clear();
for(int i = 0; i < list.size(); i++){
adapter.add(list.get(i));
}
adapter.notifyDataSetChanged();
}
}
});
buttonDown.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
ListAdapter adapter = ListAdapter.this;
if(position != adapter.getCount()-1){
GameTask current = adapter.getItem(position);
ArrayList<GameTask> list = new ArrayList<GameTask>();
for(int i = 0; i < adapter.getCount(); i++)
list.add(adapter.getItem(i));
list.remove(position);
list.add(position+1, current);
adapter.clear();
for(int i = 0; i < list.size(); i++){
adapter.add(list.get(i));
}
adapter.notifyDataSetChanged();
}
}
});
return rowView;
}
两个听众都做几乎相同,唯一的区别是条件和移动+ 1/-1的值。我想知道如何在扩展的ArrayAdapter类中创建实现OnClickListener的内部类,但是我不知道如何通过点击到这个内部类的行的位置。
好的,感谢这里的所有答案。他们真的很有帮助。但是告诉我,是否可以创建一个静态的侦听器,通知被点击的行的位置?而不是每行2个监听器。或者它不那么记忆和耗时,我不应该打扰? – Nav 2012-08-03 11:14:38
我认为你不应该打扰,但如果你认为它可能是一个瓶颈配置它肯定。 – Gautam 2012-08-03 11:18:05