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
просто, только a 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>
Ответы
Ответ 1
Ваша строка 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();
Ответ 2
Если вы работаете с подобной проблемой, но вы уверены, что используете таргетинг на linearLayout:
Удалите файл gen/your.app.package/R.java.
Это происходит из-за ошибки xml, когда вы удаляете R.java, она будет воссоздана при следующей сборке/запуске.
Ответ 3
Я просто добавил android: id = "@+ id/my_layout" в LinearLayout, который завернул TextView и решил аналогичную проблему.
Ответ 4
У меня была та же проблема, и я просто переименовал вставленный объект вида.
Вот так:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/newTextViewName"
android:textSize="34dp"
/>
Ответ 5
В моем случае 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);
Ответ 6
Это можно решить, заменив
final String text = (String) ((TextView)view).getText();
с
TextView temp= (TextView) view.findViewById(R.id.textView);
Это работает для меня.