android.widget.LinearLayout 无法转换为 android.widget.TextView
Posted
技术标签:
【中文标题】android.widget.LinearLayout 无法转换为 android.widget.TextView【英文标题】:android.widget.LinearLayout cannot be cast to android.widget.TextView 【发布时间】:2012-06-07 19:28:33 【问题描述】:我像这样在运行时添加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_
android:layout_
android:orientation="vertical" >
<TextView
android:layout_
android:layout_
android:id="@+id/contents"
android:textSize="34dp"
/>
</LinearLayout>
【问题讨论】:
【参考方案1】:您的行是由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();
【讨论】:
【参考方案2】:如果你遇到了类似的问题,但你确定你的目标是线性布局:
删除文件gen/your.app.package/R.java。
这是由于 xml 错误而发生的,当您删除 R.java 时,它将在下一次构建/运行时重新创建。
【讨论】:
成功了!够笨的:p 或者只是尝试点击REBUILD按钮【参考方案3】:我刚刚将 android:id="@+id/my_layout" 添加到包装 TextView 并解决了类似问题的 LinearLayout 中。
【讨论】:
奇怪的是,这也解决了我的 list_item.xml 问题,其中我有多个项目,但没有为包含它们的 LinearLayout 设置 id。不知何故android无法将它与普通View区分开来,可能是因为它没有没有id的R.layout类型,所以它尝试转换它并失败。【参考方案4】:我遇到了同样的问题,我只是重命名了插入的视图对象。
像这样:
<TextView
android:layout_
android:layout_
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);
这对我有用。
【讨论】:
以上是关于android.widget.LinearLayout 无法转换为 android.widget.TextView的主要内容,如果未能解决你的问题,请参考以下文章