簡體   English   中英

android.widget.LinearLayout無法強制轉換為android.widget.TextView

[英]android.widget.LinearLayout cannot be cast to 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>

您的行是由LinearLayout包裝的TextView ,因此您可能希望這樣做:

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();

如果您遇到類似問題,但確定已針對linearLayout:

刪除文件gen / your.app.package / R.java。

這是因為xml錯誤,當您刪除R.java時,它將在下一次構建/運行時重新創建。

我剛剛將android:id =“@ + id / my_layout”添加到了包裝TextView並解決了類似問題的LinearLayout。

我有同樣的問題,我只是重命名插入的視圖對象。

像這樣:

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

在我的例子中,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);

您可以通過替換來解決此問題

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

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

這適合我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM