Arindam Mukherjee Ответов: 1

Как изменить позицию 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 дня. Помогите мне, пожалуйста. Спасибо.

1 Ответов

Рейтинг:
0

User 7429338

Позиция в onItemClick-это индекс адаптера, например

adapter.getItemAtPosition(position)

Однако вы используете его в качестве индекса для mapPost. Похоже, что вы фильтруете адаптер, но не mapPost.