【问题标题】:Click ListView Item after filter the list过滤列表后点击 ListView Item
【发布时间】:2020-03-18 23:22:15
【问题描述】:

我为我的学习做了一些项目,我想使用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>

我的布局 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

【问题讨论】:

    标签: java android listview


    【解决方案1】:

    对@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();
            }
        }
    }
    

    希望这可以回答类似的问题

    【讨论】:

      【解决方案2】:

      您的项目元素是 LinearLayout,而不是 TextView。正确地,您应该按位置获取集合元素(为此,您有位置变量)并从中获取文本。类似的东西

      字符串文本 = 适配器.getItem(位置)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-09
        • 1970-01-01
        • 2020-03-15
        • 1970-01-01
        • 2014-08-26
        • 2018-07-07
        • 2015-06-12
        • 2021-04-27
        相关资源
        最近更新 更多