gpt4 book ai didi

java - 在4列 ListView android中过滤数据

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

我有一个应用程序,其中包括数据库和 ListView ,用于显示从数据库获取的数据。 ListView 有 4 列,每列显示一列 DB。当我从数据库获取数据时,方法返回数组列表中的数据。然后我将 arraylist 拆分为 4 个 arraylist,并将其发送到自定义适配器,该适配器获取 4 个 arraylist 作为输入。问题是当我在costum适配器中使用过滤器来过滤列中的数据时,我对该列工作正常,但其他列保持不变,因此过滤数据的相关数据不正确,并且不是该行的相关数据。有没有办法在数据过滤时获得正确的数据集?请帮忙。这是我的自定义适配器。

    package javadi60.saber.storeassistant;

import android.app.Activity;
import android.content.Context;
import android.graphics.Typeface;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class CustomAdapter2 extends BaseAdapter implements Filterable {
Context context;
ArrayList<String> lista,listb,listc,listd;
ArrayList<String> listb2;
LayoutInflater inflater;
Typeface tf2;
int a;



public CustomAdapter2(Context aplicationContext, ArrayList<String> lista, ArrayList<String> listb, ArrayList<String> listc, ArrayList<String> listd, Typeface tf2, int a) {
this.context = context;
this.lista = lista;
this.listb = listb;
this.listc = listc;
this.listd = listd;
this.listb2=listb;
this.tf2 = tf2;
this.a = a;
inflater=(LayoutInflater.from(aplicationContext));

}

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

@Override
public Object getItem(int i) {
return listb2.get(i);
}

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

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
view=inflater.inflate(R.layout.listitem2,null);
TextView a1=view.findViewById(R.id.itemA);
TextView a2=view.findViewById(R.id.itemB);
TextView a3=view.findViewById(R.id.itemC);
TextView a4=view.findViewById(R.id.itemD);
ImageView i1=view.findViewById(R.id.item2Image);
LinearLayout ln2=view.findViewById(R.id.item2Layout);


i1.setImageResource(a);
i1.setVisibility(View.GONE);
a1.setTypeface(tf2);
a2.setTypeface(tf2);
a3.setTypeface(tf2);
a4.setTypeface(tf2);
a1.setText(lista.get(i));
a2.setText(listb2.get(i));
a4.setText(listc.get(i));
a3.setText(listd.get(i));




int s=Integer.parseInt(listc.get(i));
if (s<a){
ln2.setBackgroundResource(R.color.list2);
}



return view;
}

public void ClearList(){
lista.clear();
listb.clear();
listc.clear();
listd.clear();
}

@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();

if (constraint == null || constraint.length() == 0) {
//no constraint given, just return all the data. (no search)
results.count = listb.size();
results.values = listb;
} else {//do the search
List<String> resultsData = new ArrayList<>();
String searchStr = constraint.toString().toUpperCase();
for (String s : listb)
if (s.toUpperCase().contains(searchStr)) resultsData.add(s);
results.count = resultsData.size();
results.values = resultsData;
}

return results;
}

@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
listb2 = (ArrayList<String>) results.values;
notifyDataSetChanged();
}
};}



}

正如我所说,过滤器在指定列中做得很好,但其他列中的数据保持不变,并且行数据为 false 。请告诉我解决这个问题的方法。

最佳答案

与其将 UI 拆分为 4 个 ListView ,不如使用具有 4 个水平 TextView (每列 1 个)的单个 ListView ,如下所示:

TextView1 | TextView 2 | TextView 3 | TextView 4

您可以为此使用 Horizo​​ntal LinearLayout

使用单个适配器。这将解决您的过滤问题,并减少管理 4 个不同列表所需的工作量。

List data = new ArrayList<Data>();

Class Data {
String a;
String b;
String c;
String d;
}

关于java - 在4列 ListView android中过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51161020/

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