web-dev-qa-db-ja.com

android.widget.LinearLayoutをAndroid.widget.TextViewにキャストすることはできません

次のように、実行時にListViewを追加します。

     MainMenue =  getResources().getStringArray(R.array.Unit);
    // remove all controls 
    LinearLayout formLayout = (LinearLayout)findViewById(R.id.submenue);
    formLayout.removeAllViews();
    menueview = new ListView(getApplicationContext());               
    menueview.setVisibility(ListView.VISIBLE);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
               LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
    params.gravity = Gravity.RIGHT;
    menueview.setLayoutParams(params);
    menueview.setAdapter(new submenueadapter(menueview.getContext(), MainMenue));
    // Set the on Item 
    SetMenueOnClick() ;
    formLayout.addView(menueview);

次に、次のようなアイテムクリックリスナーを追加します。

 public void SetMenueOnClick() {
     menueview.setOnItemClickListener(new OnItemClickListener() {
          public void onItemClick(AdapterView<?> parent, View view,
                  int position, long id) {
              final String text = (String) ((TextView)view).getText();
          }
     });
 }

しかし、私はエラーがあります:

06-03 10:59:25.862: E/AndroidRuntime(14732):    at Android.view.ViewRoot.handleMessage(ViewRoot.Java:2109)
Android.widget.LinearLayout cannot be cast to Android.widget.TextView

この行で:

final String text = (String) ((TextView)view).getText();

この号のテキストを入手する方法はありますか?アダプターは次のようになります。

public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View rowView = inflater.inflate(R.layout.shortmenue, parent, false);
    TextView textView = (TextView) rowView.findViewById(R.id.contents);

    textView.setText(values[position]);

    // Change icon based on name
    String s = values[position];

    System.out.println(s);

    rowView.setBackgroundResource(R.drawable.alternate_list_color);
    return rowView;
}

およびR.layout.shortmenueは単純で、以下のようなTextViewのみです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:orientation="vertical" >

                <TextView
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:id="@+id/contents"
                Android:textSize="34dp" 

                />

</LinearLayout>
14
AMH

行はTextViewでラップされたLinearLayoutなので、次のようにします。

LinearLayout ll = (LinearLayout) view; // get the parent layout view
TextView tv = (TextView) ll.findViewById(R.id.contents); // get the child text view
final String text = tv.getText().toString();
19
Luksprog

同様の問題を実行しているが、linearLayoutをターゲットにしていることが確実な場合:

削除ファイルgen/your.app.package/R.Java。

これはxmlのバグが原因で発生します。R.Javaを削除すると、次のビルド/実行時に再作成されます。

9
sagits

TextViewをラップして同様の問題を解決したLinearLayoutにAndroid:id = "@ + id/my_layout"を追加しました。

1
RealNmae

私の場合、XMLにはTextViewが含まれていましたが、書き間違えました

final TextView text = (TextView) inflater.inflate(R.layout.item_text, layout);

の代わりに

final TextView text = (TextView) inflater.inflate(R.layout.item_text, layout, false);
0
CoolMind

置き換えることでこれを解決できます

final String text = (String) ((TextView)view).getText();

TextView temp= (TextView) view.findViewById(R.id.textView);

これは私のために働きます。

0
Naveen rana

同じ問題が発生し、挿入されたビューオブジェクトの名前を変更しました。

このような:

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:id="@+id/newTextViewName"
    Android:textSize="34dp"
/>
0
thrashzone