2012-06-03 2 views
12

dodaję ListView na starcie tak:android.widget.LinearLayout nie mogą być oddane do 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); 

a następnie dodać artykuł kliknij słuchacza tak:

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

Ale mam błąd:

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 

na tej linii:

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

Każdy pomysł, jak zdobyć tekst w tym wydaniu? adapter wygląda następująco:

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; 
} 

i R.layout.shortmenue jest proste, tylko TextView jak poniżej:

<?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> 

Odpowiedz

16

Twój wiersz jest TextView owinięty przez LinearLayout więc warto to zrobić:

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

Jeśli masz podobny problem, ale masz pewność, że celowałeś w linearLoutout:

Usuń plik gen/your.app.package/R.java.

Dzieje się tak z powodu błędu xml, po usunięciu R.java zostanie on odtworzony przy następnej kompilacji/uruchomieniu.

+0

Pracowałem! Na tyle głupi: p –

+2

Lub po prostu spróbuj uderzyć przycisk REBUILD –

1

Właśnie dodałem android: id = "@ + id/my_layout" do LinearLayout, który owinął TextView i rozwiązał podobny problem.

+0

Co dziwne, rozwiązał to również mój problem list_item.xml, w którym miałem wiele elementów, ale nie ustawiłem identyfikatora dla zawierającego je LinearLayout. W jakiś sposób Android nie może odróżnić go od normalnego widoku, prawdopodobnie dlatego, że nie ma typu R.layout bez id, więc próbuje go rzucić i nie. –

0

Miałem ten sam problem i właśnie zmieniłem nazwę wstawionego obiektu widoku.

Jak to:

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

W moim przypadku XML zawierał TextView, ale popełniłem błąd pisząc

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

zamiast

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

Można rozwiązać ten problem zastępowanie

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

z

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

Działa to dla mnie.