Как изменить позицию Android listview после фильтрации для setonitemclicklistener
В течение нескольких дней я пытаюсь выполнить простую задачу. Я хочу отфильтровать listview, и когда я нажимаю на отфильтрованный элемент списка, OnItemClickListener собирает сообщения дан из нужного элемента списка и поместите это значение в следующее действие.
Но проблема в том, что onItemClickListener не может получить сообщения дан из списка отфильтрованных позиций видно, что он щелкает по отфильтрованному элементу списка, но получает сообщения дан позиции старого элемента списка.
Например, скажем, мой listview в начальной позиции выглядит следующим образом:
Один
AB
БА
С
ЦБ
В этой позиции, если я выберу какой-либо элемент списка, он получит сообщения дан из правильного пункта.
Теперь проблема возникает, когда я фильтрую ListView с помощью редактируемого текста. Допустим, я набрал в редактирование текста. Затем ListView изменяется следующим образом:
С
ЦБ
В этом положении, если я нажму на кнопку С, он получит сообщения дан от Один а если я нажму на кнопку ЦБ он получит свое сообщения дан от AB в соответствии с начальной позицией списка.
Что я уже пробовал:
Пожалуйста, посмотрите на код моего фрагмента, где генерируется список:
public void filterTextmethod() { editText = (EditText) rootView.findViewById(R.id.inputsearchenglishhome); initlist(); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (adapter != null) { System.out.println("Text[" + s + "]"); adapter.getFilter().filter(s.toString()); adapter.notifyDataSetChanged(); } } @Override public void afterTextChanged(Editable s) { } }); } private void initlist() { progressBar.setVisibility(View.VISIBLE); StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String s) { gson = new Gson(); list = (List) gson.fromJson(s, List.class); postTitle = new String[list.size()]; for (int i = 0; i < list.size(); ++i) { mapPost = (Map<String, Object>) list.get(i); mapTitle = (Map<String, Object>) mapPost.get("title"); postTitle[i] = (String) mapTitle.get("rendered"); } adapter = new ArrayAdapter<>(Objects.requireNonNull(getActivity()), android.R.layout.simple_list_item_1, postTitle); postList.setAdapter(adapter); progressBar.setVisibility(View.GONE); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { progressBar.setVisibility(View.GONE); if (mToast != null) { mToast.cancel(); } mToast = Toast.makeText(getActivity(), "Error! Check your Internet Connection.", Toast.LENGTH_LONG); mToast.show(); } }); request.setRetryPolicy(new DefaultRetryPolicy(5000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); RequestQueue rQueue = Volley.newRequestQueue(Objects.requireNonNull(getActivity()).getApplicationContext()); rQueue.getCache().invalidate(url, true); rQueue.add(request); postList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mapPost = (Map<String, Object>) list.get(position); postID = ((Double) mapPost.get("id")).intValue(); Intent intent = new Intent(getActivity(), FullPostView.class); intent.putExtra("id", "" + postID); //intent.putExtra("colorcode", "#FF5252"); //intent.putExtra("parentFragmentSubject", "English"); startActivity(intent); } }); }
Теперь посмотрите на XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".English.EnglishHomeScreen" android:gravity="center" android:id="@+id/searchlayoutenglishhome"> <ProgressBar android:id="@+id/progressBar" style="@style/RedAccent" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:visibility="invisible" android:layout_marginTop="150dp" android:layout_centerHorizontal="true" android:layout_below="@+id/inputsearchenglishhome"/> <EditText android:id="@+id/inputsearchenglishhome" android:layout_width="match_parent" android:layout_height="35dp" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_marginTop="10dp" android:drawableStart="@drawable/ic_search_black_24dp" android:drawableTint="@color/search_black" android:paddingStart="8dp" android:paddingEnd="8dp" android:drawablePadding="8dp" android:background="@drawable/edittext_round_red" android:hint="Search in all English Questions" android:layout_gravity="bottom" android:inputType="textVisiblePassword"/> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="10dp" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_marginBottom="10dp" android:paddingBottom="10dp" android:id="@+id/postList" android:layout_below="@+id/inputsearchenglishhome" android:descendantFocusability="blocksDescendants" android:clickable="false" android:focusable="false"/> </RelativeLayout>
Пожалуйста, помогите мне найти решение. я буду очень признателен вам за помощь. Я не могу решить эту проблему за 2-3 дня. Помогите мне, пожалуйста. Спасибо.