gpt4 book ai didi

java - Android 自定义 ListView 适配器在数据被删除时行为异常

转载 作者:行者123 更新时间:2023-12-02 04:24:03 24 4
gpt4 key购买 nike

基本上,这是 MainActivity 类的相关代码块:

private ListView listView;
private ArrayList<String> tasks = new ArrayList<String>();

private CustomListViewAdapter customListViewAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tasks.add("Hfrfello");
tasks.add("Heefrefllo");
tasks.add("Hellefrefo");
tasks.add("Helggglo");
tasks.add("Helggglo");
tasks.add("aaHello");
tasks.add("aaaaaaHelaaalo");
tasks.add("Hfrfello");
tasks.add("Heefrefllo");
tasks.add("Hellefrefo");
tasks.add("Helggglo");
tasks.add("Helggglo");
tasks.add("aaHello");
tasks.add("aaaaaaHelaaalo");

this.listView = (ListView) findViewById(R.id.tasks);

this.customListViewAdapter = new CustomListViewAdapter(getApplicationContext(), this.tasks);

this.listView.setAdapter(this.customListViewAdapter);

this.listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//deleteTask(position);

customListViewAdapter.remove(position);
//tasks.remove(position);
customListViewAdapter.notifyDataSetChanged();
}
});
}

这是我的 CustomListViewAdapter 类:

package com.hassanalthaf.dailytaskmanager;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

public class CustomListViewAdapter extends BaseAdapter {
private Context context;
private ArrayList<String> tasks;
private static LayoutInflater inflater = null;

public CustomListViewAdapter(Context context, ArrayList<String> data) {
this.context = context;
this.tasks = data;
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
return this.tasks.size();
}

@Override
public Object getItem(int position) {
return position;
}

@Override
public long getItemId(int position) {
return position;
}

public void remove(int position) {
this.tasks.remove(position);
System.out.println(this.tasks);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;

if (convertView == null) {
view = this.inflater.inflate(R.layout.list_row, null);

TextView taskName = (TextView) view.findViewById(R.id.taskName);
ImageView image = (ImageView) view.findViewById(R.id.deleteButton);

String task = this.tasks.get(position);

taskName.setText(task);
}

return view;
}
}

我的问题:当我单击图形用户界面时,它确实删除并更新了 ListView,但是更新错误。它的作用是,当我单击前 3 个元素(应该删除它们)时,它会从 ArrayList 中删除它们,并且在删除它们后我会得到正确的输出。但是,在用户界面中,它并没有删除我单击的内容,而是仅删除底部的项目,而不触及顶部的项目。我该如何解决这个问题?

最佳答案

您的 getView() 未设置回收的 convertView 对象的状态,因此它们继续显示旧状态。试试这个:

@Override 
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;

if (convertView == null) {
view = this.inflater.inflate(R.layout.list_row, null);
}

TextView taskName = (TextView) view.findViewById(R.id.taskName);
String task = this.tasks.get(position);
taskName.setText(task);

return view;
}

关于java - Android 自定义 ListView 适配器在数据被删除时行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32416445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com