列表视图中的搜索过滤器在单击项目时返回错误值

伊戈尔·克里缅托夫

我有一个带有自定义过滤器的自定义 ListView,但是在 Edit_text 字段中输入数据后,我更改了 ListView,单击修改后的列表后,我得到了错误的信息。我该如何解决这个问题?

随着应用程序自己启动,我在单击时显示了正确的信息,但是在我编辑 EditText 和 List 后,我​​在单击时显示了完全错误的信息。

字典片段

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_dictionary, container, false);

    listView = view.findViewById(R.id.dictionaryList);
    editText = view.findViewById(R.id.edit_search_dict);
    editText.addTextChangedListener(textWatcher);
    mylist = new ArrayList<>();
    SingleRow singleRow;

    for (int i = 0;i<mTitle.length;i++){
        singleRow = new SingleRow(mTitle[i],mDescriprion[i],images[i],mFind[i]);
        mylist.add(singleRow);
    }

    myAdapter = new MyAdapter(getActivity(),mylist);
    listView.setAdapter(myAdapter);

    return view;
}

    @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            mCallback.setMyVariableX(getListOfWords()[position]);
            FragmentManager manager = getFragmentManager();
            FragmentTransaction transaction = manager.beginTransaction();
          transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
            transaction.replace(R.id.fragment_container, new DetailFragment()).addToBackStack(null);
            transaction.commit();
        }
    });

我的适配器

public class MyAdapter extends BaseAdapter implements Filterable {

DataCommunication mCallback;

Context c;
ArrayList<SingleRow> originalArray,tempArray;
CustomFilter cs;

public MyAdapter(Context c, ArrayList<SingleRow> originalArray){
    this.c = c;
    this.originalArray = originalArray;
    this.tempArray = originalArray;
}

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

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    LayoutInflater inflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View row = inflater.inflate(R.layout.row,null);

    ImageView images = row.findViewById(R.id.imageViewKanji);
    TextView myTitle = row.findViewById(R.id.textView1);
    TextView myDescription = row.findViewById(R.id.textView2);

    myTitle.setText(originalArray.get(i).getTitle());
    myDescription.setText(originalArray.get(i).getDescription());
    images.setImageResource(originalArray.get(i).getImage());



    return row;
}

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

@Override
public long getItemId(int i) {
    //return originalArray.indexOf(getItemId(i));
    return i;
}

@Override
public Filter getFilter() {
    if (cs == null) {
        cs = new CustomFilter();
    }
    return cs;
}

class CustomFilter extends Filter{

    @Override
    protected FilterResults performFiltering(CharSequence charSequence) {
        FilterResults results = new FilterResults();

        if (charSequence != null && charSequence.length() > 0) {

            charSequence = charSequence.toString().toUpperCase();
            ArrayList<SingleRow> filters = new ArrayList<>();

        for (int i = 0; i < tempArray.size(); i++) {
            if (tempArray.get(i).getTitle().toUpperCase().contains(charSequence)) {
                SingleRow singleRow = new SingleRow(tempArray.get(i).getTitle()
                        , tempArray.get(i).getDescription()
                        , tempArray.get(i).getImage()
                        ,tempArray.get(i).getKanji());
                filters.add(singleRow);
            }
        }
        for (int i = 0; i < tempArray.size(); i++) {
                if (tempArray.get(i).getDescription().toUpperCase().contains(charSequence)) {
                    SingleRow singleRow = new SingleRow(tempArray.get(i).getTitle()
                            , tempArray.get(i).getDescription()
                            , tempArray.get(i).getImage()
                           ,tempArray.get(i).getKanji());
                    filters.add(singleRow);
                }
            }
            for (int i = 0; i < tempArray.size(); i++) {
                if (tempArray.get(i).getKanji().toUpperCase().contains(charSequence)) {
                    SingleRow singleRow = new SingleRow(tempArray.get(i).getTitle()
                            , tempArray.get(i).getDescription()
                            , tempArray.get(i).getImage()
                            ,tempArray.get(i).getKanji());
                    filters.add(singleRow);

                }
            }

        results.count = filters.size();
        results.values = filters;
    }
        else
        {
            results.count = tempArray.size();
            results.values = tempArray;
        }

        return results;
    }

    @Override
    protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
        originalArray = (ArrayList<SingleRow>)filterResults.values;
        notifyDataSetChanged();
    }
}}

单行

public class SingleRow {

String title;
String description;
int image;
String kanji;

public String getKanji() {
    return kanji;
}

public void setKanji(String kanji) {
    this.kanji = kanji;
}

public SingleRow(String title, String description, int image, String kanji){
    this.title = title;
    this.description = description;
    this.image = image;
    this.kanji = kanji;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public int getImage() {
    return image;
}

public void setImage(int image) {
    this.image = image;
}}

请帮我解决一下这个。我试图解决它,但一切都以离开或空值结束。建议在代码中显示需要更改或指定的内容。

GitHub: https://github.com/figyshkin/KanjiLearn

您需要获取过滤器数据列表,然后如果您单击任何项​​目,您将获得正确的数据。

请尝试使用以下代码:

创建另一个全局数组列表:

ArrayList<SingleRow> finalfilters;

并在类 CustomFilter 内部初始化 extends Filter{

class CustomFilter extends Filter{
finalfilters = new ArrayList<>();

//After search set final search data into finalfilters list:

finalfilters=filters;

}

//Create one method who returns final search list:
public void getFilterList()
{
return finalfilter;
}

将 getFilterList() 调用到您的活动中,设置到主活动类中的另一个列表中并管理列表项的点击事件并通过索引获取过滤后的数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Listview自定义过滤器在过滤列表中单击时给出错误的项目

来自分类Dev

返回页面时,带有过滤器搜索页面的Flutter不断从查询中添加相同的列表视图

来自分类Dev

查看项目组件返回后保存列表组件中项目的选择过滤器值

来自分类Dev

错误的搜索过滤器

来自分类Dev

搜索元素列表时,角度过滤器显示不匹配的值

来自分类Dev

SQL列值为空,搜索过滤器错误

来自分类Dev

SQL列值为空,搜索过滤器错误

来自分类Dev

aurelia视图中的过滤器阵列

来自分类Dev

单击列表视图中的项目时显示视图

来自分类Dev

Android搜索视图过滤器

来自分类Dev

在列表视图中单击错误的项目图像按钮

来自分类Dev

在过滤列表视图中获取错误的项目位置

来自分类Dev

单击列表视图中的项目时显示片段

来自分类Dev

单击某些列表视图中的项目时出错

来自分类Dev

如果搜索查询在搜索视图中不匹配,如何为回收者视图设置过滤器

来自分类Dev

Android cursoradapter过滤器列表视图

来自分类Dev

单击按钮时的AngularJS过滤器

来自分类Dev

SDL Tridion 2011内容管理器-列表视图中缺少日期过滤器

来自分类Dev

单击列表视图中的选定项目时,如何在文本视图中设置文本?

来自分类Dev

需要帮助使搜索过滤器和下拉列表与列表中的多个值绑定

来自分类Dev

滚动时列表视图中的项目顺序错误

来自分类Dev

Android 搜索过滤器在没有结果时显示文本视图

来自分类Dev

过滤器列表对象包含值

来自分类Dev

使 Jquery 项目过滤器选项卡在单击时处于活动状态

来自分类Dev

ListView自定义过滤器过滤时给出错误的项目选择[Android]

来自分类Dev

ListView自定义过滤器过滤时给出错误的项目选择

来自分类Dev

ListView自定义过滤器过滤时给出错误的项目选择

来自分类Dev

单击列表视图中的某些项目时,如何影响列表视图之外的元素?

来自分类Dev

XML 视图中的 SAPUI5 绑定过滤器

Related 相关文章

  1. 1

    Listview自定义过滤器在过滤列表中单击时给出错误的项目

  2. 2

    返回页面时,带有过滤器搜索页面的Flutter不断从查询中添加相同的列表视图

  3. 3

    查看项目组件返回后保存列表组件中项目的选择过滤器值

  4. 4

    错误的搜索过滤器

  5. 5

    搜索元素列表时,角度过滤器显示不匹配的值

  6. 6

    SQL列值为空,搜索过滤器错误

  7. 7

    SQL列值为空,搜索过滤器错误

  8. 8

    aurelia视图中的过滤器阵列

  9. 9

    单击列表视图中的项目时显示视图

  10. 10

    Android搜索视图过滤器

  11. 11

    在列表视图中单击错误的项目图像按钮

  12. 12

    在过滤列表视图中获取错误的项目位置

  13. 13

    单击列表视图中的项目时显示片段

  14. 14

    单击某些列表视图中的项目时出错

  15. 15

    如果搜索查询在搜索视图中不匹配,如何为回收者视图设置过滤器

  16. 16

    Android cursoradapter过滤器列表视图

  17. 17

    单击按钮时的AngularJS过滤器

  18. 18

    SDL Tridion 2011内容管理器-列表视图中缺少日期过滤器

  19. 19

    单击列表视图中的选定项目时,如何在文本视图中设置文本?

  20. 20

    需要帮助使搜索过滤器和下拉列表与列表中的多个值绑定

  21. 21

    滚动时列表视图中的项目顺序错误

  22. 22

    Android 搜索过滤器在没有结果时显示文本视图

  23. 23

    过滤器列表对象包含值

  24. 24

    使 Jquery 项目过滤器选项卡在单击时处于活动状态

  25. 25

    ListView自定义过滤器过滤时给出错误的项目选择[Android]

  26. 26

    ListView自定义过滤器过滤时给出错误的项目选择

  27. 27

    ListView自定义过滤器过滤时给出错误的项目选择

  28. 28

    单击列表视图中的某些项目时,如何影响列表视图之外的元素?

  29. 29

    XML 视图中的 SAPUI5 绑定过滤器

热门标签

归档