android.widget.LinearLayout无法强制转换为android.widget.TextView对话框

时间:2018-01-07 12:13:57

标签: android xml android-layout

我正在尝试制作一个高分列表,可以从我的主菜单访问。我试图通过使用对话框来实现这一目标。我的对话框类:

public class CustonDialog extends Dialog {
    private LinearLayout layout;
    private Context mContext;

    public CustonDialog(Context context) {
        super(context, android.R.style.Theme_Translucent_NoTitleBar);
        setContentView(R.layout.activity_highscore);
        setCancelable(false);
        mContext = context;

        Button buttonClose = (Button) findViewById(R.id.button_close);
        buttonClose.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                dismiss();
            }
        });

    }
    public void addKeyValuePair(String key, String value) {
      /* View row_key = getLayoutInflater().inflate(R.layout.row_key,layout,false);
        TextView textView_key = (TextView) row_key.findViewById(R.id.row_textView_key);
        View row_value = getLayoutInflater().inflate(R.layout.row_value,layout,false);
        TextView textView_value = (TextView) row_value.findViewById(R.id.row_textView_value);
*/
     // TextView textView_key = (TextView) findViewById(R.id.row_textView_value);
        TextView textView_key = (TextView) getLayoutInflater().inflate(R.layout.row_key,layout,false);
        TextView textView_value = (TextView) getLayoutInflater().inflate(R.layout.row_value,layout,false);

        textView_key.setText(key);
        textView_value.setText(value);

        layout.addView(textView_key);
        layout.addView(textView_value);
    }
}

使用xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/button_close"
    android:layout_gravity="center_horizontal"
    android:textSize="20sp"
    android:textStyle="bold" />
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/scrollView"
        android:layout_gravity="center_horizontal">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/linear_layout"
            android:orientation="vertical">
        </LinearLayout>
    </ScrollView>
    </LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="dummy_text"
        android:id="@+id/row_textView_key"
        android:layout_marginTop="20sp"
        android:textStyle="bold"
        android:textSize="30sp"
        android:layout_marginLeft="20sp">
    <include layout="@layout/row_value"/>
</TextView>

和:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="dummy_value"
    android:id="@+id/row_textView_value"
    android:layout_marginTop="5sp"
    android:layout_marginLeft="20sp"
    android:textSize="30sp">
<include layout="@layout/row_key"/>
</TextView>

当我运行代码时,它会抛出异常“android.widget.LinearLayout无法转换为android.widget.TextView,当到达void addKeyValuePair的第一行时。有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

而不是

TextView textView_key = (TextView) getLayoutInflater().inflate(R.layout.row_key,layout,false);
    TextView textView_value = (TextView) getLayoutInflater().inflate(R.layout.row_value,layout,false);

TextView textView_key = (TextView) findViewById(R.id.row_textView_value)

似乎R.layout.row_key是线性布局,并且无法将其转换为textView,只需将变量与实际文本视图绑定即row_textView_value,就像您使用上面的按钮所做的那样 并注意textview必须与您在setContentView中添加的布局相同,否则您必须在XML中包含布局,如输入  <include />代码

<include layout="@layout/row_key"/>

在阅读更新后的问题后,更新2

<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/button_close"
android:layout_gravity="center_horizontal"
android:textSize="20sp"
android:textStyle="bold" />
<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/scrollView"
    android:layout_gravity="center_horizontal">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/linear_layout"
        android:orientation="vertical">
 <include layout="@layout/row_value"/>
 <include layout="@layout/row_key"/>
    </LinearLayout>
</ScrollView>
</LinearLayout>

从其他xml文件中删除include

答案 1 :(得分:0)

您以SELECT t.id, t.name, count(*) FROM tag AS t LEFT JOIN tag_in_link AS tl ON tl.tag_id = t.id GROUP BY t.id, t.name; 为根容器布局R.layout.row_keyR.layout.row_value。这就是你得到这个例外的原因。

  

android.widget.LinearLayout无法强制转换为android.widget.TextView对话框

<强>解决方案
1.使两个布局仅包含LinearLayout

TextView
  1. 在对布局进行充气时,您可以进入视图。

     <?xml version="1.0" encoding="utf-8"?>
        <TextView xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="dummy_value"
            android:id="@+id/row_textView_value"
            android:layout_marginTop="5sp"
            android:layout_marginLeft="20sp"
            android:textSize="30sp">
        </TextView>