我創建了一個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