gpt4 book ai didi

java - Listview 滚动时滞后,添加项目时崩溃

转载 作者:行者123 更新时间:2023-12-02 13:58:43 25 4
gpt4 key购买 nike

我有一个自定义 ListView ,带有一个用于添加更多元素的按钮但是当我添加和元素应用程序崩溃时,但是当我重新启动时,我发现元素已添加(很少不会崩溃)

还有我

我使用自定义适配器

 class CustomAdapter extends BaseAdapter {

ArrayList<ListItem> listItems = new ArrayList<ListItem>();

CustomAdapter(ArrayList<ListItem> list){
this.listItems = list;
}

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

@Override
public Object getItem(int position) {
return listItems.get(position).name;
}

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

@Override
public View getView(int i, View convertView, ViewGroup parent) {

LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.list_item,null);

TextView name = (TextView) view.findViewById(R.id.name);
TextView lastm = (TextView) view.findViewById(R.id.last);
TextView time = (TextView) view.findViewById(R.id.time);
CircleImageView pic= (CircleImageView) view.findViewById(R.id.pic);

name.setText(listItems.get(i).name);
lastm.setText(listItems.get(i).lastm);
time.setText(listItems.get(i).time);
Bitmap bmp = BitmapFactory.decodeByteArray(listItems.get(i).pic,0,listItems.get(i).pic.length);
pic.setImageBitmap(bmp);




return view;
}
}

当我添加一个元素时,应用程序崩溃了

add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText editText=(EditText) mView.findViewById(R.id.name);
String name=editText.getText().toString();
boolean result=myDataBase.insertData(imageViewToByte(img),name,"no messages yet","");
if (result) {
Toast.makeText(Main2Activity.this, "Saved in DATABASE", Toast.LENGTH_SHORT).show();
viewLastData();
dialog.dismiss();
}

最佳答案

如果您的 ListView 滞后,那是因为您使用了 wrap_content 作为 listView 的 layout_height。它强制您的 ListView 计算内部的所有项目,这会对性能产生巨大的影响。

因此,请将 wrap_content 替换为 match_parent 以避免这些滞后。

编辑:在您的Adapter中也使用ViewHolder模式,请参阅this link

这是一个例子:

// ViewHolder Pattern
private static class ViewHolder {
TextView name, status;
}

@Override @NonNull
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
ViewHolder holder;

if (convertView == null) {
LayoutInflater vi = LayoutInflater.from(getContext());
convertView = vi.inflate(R.layout.list_item, parent, false);

holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.text_name);
holder.status = (TextView) convertView.findViewById(R.id.another_text);

convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

// Then do the other stuff with your item
// to populate your listView
// ...

return convertView
}

关于java - Listview 滚动时滞后,添加项目时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47994069/

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