Нажмите ListView Item после фильтрации списка - PullRequest
0 голосов
/ 19 марта 2020

Я делаю какой-то проект для своего исследования, я хочу создать поиск по списку, используя edittext, и он отлично работает. Проблема в том, что когда просмотр списка отфильтрован, и я пытаюсь щелкнуть по результату, он переходит к неправильному действию.

Затем я понимаю, что это вызвано тем, что я использовал позицию списка при нажатии, поэтому я попытался изменить вид списка. значения, но это довольно сложно для меня, так как я всегда сталкиваюсь с ошибкой в ​​моем коде ниже.

@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
    TextView textView = (TextView) view;
    String parameterNilai = String.valueOf(textView.getText());

    if (parameterNilai.equals("One")) {
        try {
            Intent intent = new Intent(MurotalActivity.this, com.ummi.myapplication.speaker.MurotalActivityDetail.class);
            intent.putExtra("TAG_SID", "229");
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            closeKeyboard();
            finish();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
    } else if (parameterNilai.equals("Two")) {
        try {
            Intent intent = new Intent(MurotalActivity.this, com.ummi.myapplication.speaker.MurotalActivityDetail.class);
            intent.putExtra("TAG_SID", "230");
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            closeKeyboard();
            finish();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
    } else if (parameterNilai.equals("Three")) {
        try {
            Intent intent = new Intent(MurotalActivity.this, com.ummi.myapplication.speaker.MurotalActivityDetail.class);
            intent.putExtra("TAG_SID", "231");
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            closeKeyboard();
            finish();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
    }

и для массива списка, как показано ниже:

<string-array name="listsurah">
    <item>One</item>
    <item>Two</item>
    <item>Three</item>
</string-array>

My Layout XML :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".MurotalActivity"
xmlns:tools="http://schemas.android.com/tools">
<RelativeLayout
    android:id="@+id/judul1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="#A6E0BA"
    android:gravity="center_vertical">
    <EditText android:id="@+id/inputSearch"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="Cari Surat.."
        android:inputType="textVisiblePassword"/>
</RelativeLayout>
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/judul1"
    android:orientation="vertical">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <ListView
                android:id="@+id/listview"
                android:layout_width="match_parent"
                android:layout_height="9600dp"
                android:layout_marginBottom="20dp"
                android:choiceMode="singleChoice"
                android:listSelector="#F0BCBC">
            </ListView>
        </RelativeLayout>
    </ScrollView>

Ошибка, которую я получил от своего logcat:

2020-03-19 06:14:37.593 30929-30929/com.mby.mbaca E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mby.mbaca, PID: 30929
java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView
    at com.ummi.myapplication.MurotalActivity.onItemClick(MurotalActivity.java:109)
    at android.widget.AdapterView.performItemClick(AdapterView.java:318)
    at android.widget.AbsListView.performItemClick(AbsListView.java:1159)
    at android.widget.AbsListView$PerformClick.run(AbsListView.java:3136)
    at android.widget.AbsListView$3.run(AbsListView.java:4052)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

на основе вышеуказанного logcat, проблема в линии

TextView textView = (TextView) view;

, пожалуйста, нужна любая помощь Как я могу нажать ListItem на основе значения ListItem Text вместо позиции

Ответы [ 2 ]

1 голос
/ 20 марта 2020

Немного изменив ответ @Kiryl Tkach, я успешно сделал это, добавив:

String parameterNilai = listView.getItemAtPosition(position).toString();

Итак, мой полный код для onItemClick:

public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
    String parameterNilai = listView.getItemAtPosition(position).toString();

    if (parameterNilai.equals("One")) {
        try {
            Intent intent = new Intent(MurotalActivity.this, com.ummi.myapplication.speaker.MurotalActivityDetail.class);
            intent.putExtra("TAG_SID", "229");
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            closeKeyboard();
            finish();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
    } else if (parameterNilai.equals("Two")) {
        try {
            Intent intent = new Intent(MurotalActivity.this, com.ummi.myapplication.speaker.MurotalActivityDetail.class);
            intent.putExtra("TAG_SID", "230");
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            closeKeyboard();
            finish();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
    } else if (parameterNilai.equals("Three")) {
        try {
            Intent intent = new Intent(MurotalActivity.this, com.ummi.myapplication.speaker.MurotalActivityDetail.class);
            intent.putExtra("TAG_SID", "231");
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            closeKeyboard();
            finish();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
    }
}

Надеюсь, что это может ответить аналогичный вопрос

0 голосов
/ 19 марта 2020

Элементом элемента является LinearLayout, а не TextView. Правильно вы должны получить свой элемент коллекции по позиции (для этого у вас есть переменная позиции) и из него получить текст. Что-то вроде

String text = adapter.getItem (position)

...