我的目标是在启用复选框时将列表项推送到列表的末尾。我的列表项是一个对象“任务”。
ListView lv=this.getListView();
int size=lv.getCount();
Myarrayadapter adapter = new Myarrayadapter(this,getTasks());
lv.setAdapter(adapter);
lv.invalidateViews();
private List<Task> getTasks() {
List<Task> list = new ArrayList<Task>();
for(int k=0;k<taskname.length;k++)//taskname is an array of tasknames
{
list.add(new Task(taskname[k],status[k]));
return list;
}
Myarrayadapter类如下所示。我的目的是检查复选框是否已启用。如果是,请进行一些更改(文本颜色和按钮文本)并将此更改的视图移动到最后位置。
public class Myarrayadapter extends ArrayAdapter<Task> {
private final Activity context;
private final List<Task> list;
public Myarrayadapter(Activity context, List<Task> list) {
super(context, R.layout.list_item, list);
this.context = context;
this.list=list;
}
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView = inflater.inflate(R.layout.list_item, null, true);
final TextView text = (TextView) rowView.findViewById(R.id.label);
CheckBox checkbox = (CheckBox) rowView.findViewById(R.id.cb);
final Button btnChild = (Button) rowView.findViewById(R.id.directions);
text.setText(list.get(position).getName());
checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if(isChecked)
{
text.setTextColor(Color.parseColor("#468765"));
btnChild.setText("Revert");
Task taskItem= list.get(position);
list.remove(position);
list.add(taskItem);
}
}});
return rowView;
}
它没有移动我想要的确切列表项目。
先谢谢!!!!
答案 0 :(得分:1)
您需要调用notifyDataSetChanged()来更新列表视图:
list.remove(position);
list.add(taskItem);
notifyDataSetChanged(); // add this line after adding task again at last position
答案 1 :(得分:1)
试试这个(没有编写整个适配器,但是你看到需要替换的部分):
View v = convertView;
if(v == null){
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_item, null);
}
final Task task = getItem(position);
if(isChecked)
{
text.setTextColor(Color.parseColor("#468765"));
btnChild.setText("Revert");
list.remove(task);
list.add(task);
notifyDataSetChanged();
}
return v;
要获取按钮和颜色的新更改,您需要在删除它之后在任务上设置setColor和setText(在Task.class中创建自己的setColor()和setText(),然后添加它和在适配器中使用if else语句(通过使用getColor()和getText()),检查任务的颜色和文本。
答案 2 :(得分:0)
您应该覆盖ArrayAdapter中的某些方法
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}