Listview适配器类,搜索过滤器在搜索时不发送准确位置

时间:2015-12-01 07:39:56

标签: android listview search filter position

我正在尝试创建一个应用程序,以便在点击时显示 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_jobs, container, false); ArrayList<JobListDataProvider> listJobs = GetRequests(); ListView lv = (ListView)rootView.findViewById(R.id.listViewJobs); lv.setAdapter(new JobsListAdapter(getActivity(), listJobs)); //.....bindind on click.... Button pickup = (Button) rootView.findViewById(R.id.button_pickup_list); pickup.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //...................... } }); return rootView; } 行的详细信息。我为搜索选项添加了一个过滤器和三个ListView

如果我使用所有选项进行搜索,我的应用程序会显示一个成员三次,这就是我在filter()方法中注释掉两个条件的原因。

但主要的问题是,当我正在搜索成员时,它搜索得很好但是当点击搜索结果时,似乎EditText行的位置发生了变化。例如,如果我找到三个搜索结果,第一个位于第0位,第二个位于第1位,第三个位于第2位。

Listview点击事件无需搜索即可正常工作。

我需要过滤之前的旧位置,以便通过ListView将其发送到另一个Intent,这将为每个成员显示不同的数据。

ListViewAdapter.java类 `

Activity

1 个答案:

答案 0 :(得分:1)

要在onCLick()方法中获取项目的“旧”位置,请使用

arraylist.indexOf( getItem(position) )

更改您的过滤方法,以避免多次添加相同的项目:

// Filter Class
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
worldpopulationlist.clear();
if (charText.length() == 0) {
    worldpopulationlist.addAll(arraylist);
} 
else {
    boolean addToList;

    for (WorldPopulation wp : arraylist) {
        addToList = false;

        if (wp.getCountry().toLowerCase(Locale.getDefault())
                 .contains(charText) ) {
            addToList = true;
        }
        if(wp.getRank().toLowerCase(Locale.getDefault())
                  .contains(charText)) {
            addToList = true;
        }
        if (wp.getPopulation().toLowerCase(Locale.getDefault())
                   .contains(charText)) {
            addToList = true;
        }

        // now add the item to your list if it matches the search criteria
        if (addToList) {                      
            worldpopulationlist.add(wp);
        }

    }
    notifyDataSetChanged();
}

}