【问题标题】:android.widget.LinearLayout cannot be cast to android.widget.TextViewandroid.widget.LinearLayout 无法转换为 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_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>

【问题讨论】:

    标签: android android-layout android-listview


    【解决方案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_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);
          

          这对我有用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多