2

ランタイムエラー例外 が発生しました:

java.lang.ClassCastException: android.widget.TwoLineListItem cannot be cast to android.widget.TextView

私のアクティビティはListActivityではなくActivityを拡張し、レイアウトの構成は次のとおりです。

<LinearLayout ...> <ListView ...></ListView> </LinearLayout>

Java:

   ListView lv1 = (ListView) findViewById(R.id.listViewXMLdata);
    ArrayAdapter<String> arrAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_2,
        android.R.id.text2, getResources().getStringArray(R.array.countries));

    lv1.setAdapter(arrAdapter);

    lv1.setOnItemClickListener(new OnItemClickListener() {          
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
            lView.getItemAtPosition(position);

            String itemSelected = ((TextView) view).getText().toString();
            Toast.makeText(getApplicationContext(), "Clicked Position Number " + position + ": " + itemSelected ,
                    Toast.LENGTH_SHORT)
                    .show();


        }
    });

私の唯一の主な関心事は、リストにある文字列(選択されたアイテム)を取得することです。

注1:私はどのデータベースにも取り組んでいません。

注2:すでにCharSequence itemSelected =((TextView)view).getText()。toString()にキャストしようとしましたが、それでもランタイムエラーが発生しました。

ランタイムエラーは、リストからアイテムを選択し始めたときにのみ発生します。

4

3 に答える 3

9

には、2つの子(2つ)を持つ2行のテキストを持つウィジェットがandroid.R.layout.simple_list_item_2ルートとしてあります。このウィジェットをにキャストすると、に表示される例外を除いて失敗します。目的の検索:TwoLineListItemTextViewsTextViewlogcatTextViewfindViewById

String itemSelected = ((TextView) view.findViewById(android.R.id.text2)).getText().toString();
于 2012-10-03T19:38:24.337 に答える
1

ListViewにはTwoLineListItemタイプがロードされており、次の行でビューをTextViewにキャストしようとしています。

String itemSelected = ((TextView) view).getText().toString();

これを次のようなものに変更します。

String itemSelected = ((TwoLineListItem) view).getText1().getText();

動作するはずです。

編集:

http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.htmlにあるAndroidのドキュメントには次の ように書かれてい ます。

public abstract void onItemClick(AdapterView親、ビュービュー、int位置、long id)

以来:このAdapterViewのアイテムがクリックされたときに呼び出されるAPIレベル1のコールバックメソッド。

実装者は、選択したアイテムに関連付けられたデータにアクセスする必要がある場合、getItemAtPosition(position)を呼び出すことができます。

パラメーター

クリックが発生したAdapterView。

view クリックされたAdapterView内のビュー(これはアダプターによって提供されるビューになります)

position アダプター内のビューの位置。

id クリックされたアイテムの行ID。

したがって、メソッドにパラメーターとして渡されるビューは、実際には、ビューをキャストする必要があるタイプであるTwoLineListItemです。

TwoLineListItemへの参照を取得すると、次の方法で両方のTextViewを含むそのパブリックメンバーのいずれかにアクセスできます。

public TextView getText1()

以来:APIレベル1IDtext1のアイテムへのハンドルを返します。

IDtext1のアイテムへのハンドルを返します。

public TextView getText2 ()

以来:APIレベル1IDtext2のアイテムへのハンドルを返します。

IDtext2のアイテムへのハンドルを返します。

于 2012-10-03T19:39:28.503 に答える
0

さらに、 を調べるandroid.R.layout.simple_list_item_2と、次のようなレイアウト xml が見つかります。

    <TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/listPreferredItemHeight"
        android:mode="twoLine"
        android:paddingStart="?attr/listPreferredItemPaddingStart"
        android:paddingEnd="?attr/listPreferredItemPaddingEnd">

        <TextView android:id="@id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:textAppearance="?attr/textAppearanceListItem" />

        <TextView android:id="@id/text2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/text1"
        android:layout_alignStart="@id/text1"
        android:textAppearance="?attr/textAppearanceListItemSecondary" />

    </TwoLineListItem>

TwoLineListItemは 2 つTextViewの があります。お役に立てれば。

于 2015-07-19T08:35:24.063 に答える