2012-06-03 196 views
12

我在運行時添加一個ListView這樣的:android.widget.LinearLayout不能轉換爲android.widget.TextView

 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> 

回答

16

你行是TextViewLinearLayout包裹,所以你可能想這樣做:

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

如果您在類似問題上運行,但您確定已針對linearLayout:

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

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

+0

工作!愚蠢:P –

+2

或者只是試着打重建按鈕 –

1

我剛剛添加了android:id =「@ + id/my_layout」給LinearLayout,它包裝了TextView並解決了類似的問題。

+0

奇怪的是這解決了我的問題list_item.xml過,在那裏我有它的多個項目,但對於其所在的LinearLayout未設置ID。不知何故,android無法將其與普通視圖區分開來,可能是因爲它沒有沒有id的R.layout類型,所以它會嘗試投射並失敗。 –

0

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

像這樣:

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

在我的情況的XML包含一個TextView,但我犯了一個錯誤寫的

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

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

相反,您可以通過以下方法解決此替換

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

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

這對我的作品。

相關問題