android.widget.Button无法强制转换为android.widget.LinearLayout?

时间:2013-09-18 15:12:03

标签: android button android-linearlayout

当我点击一个按钮时,确实在LinearLayout中,我在这一行上出现了这个错误:

LinearLayout ll = (LinearLayout) view;

我的方法如下:

 public void adjDoa(final View view) {

    final CharSequence[] items = {"Get on with it!", "Doable!", "Maybe, maybe not.",      "Unlikely!", "When pigs fly!"};

    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(GetItActivity.this);
    dialogBuilder.setTitle("Choose doability!");
    dialogBuilder.setItems(items, new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {

            LinearLayout ll = (LinearLayout) view;
            TextView text = (TextView)ll.findViewById(R.id.tViewChDoa);
            text.setText(items[which]);
        }

    });
    dialogBuilder.create().show();
}

这是什么意思?

2 个答案:

答案 0 :(得分:11)

虽然它可以像sockeqwe's answer一样简单。如果您已将布局XML的一部分复制/粘贴/移动到XML的另一部分,则有时会发生此错误。如果是这种情况,请通过Project清除项目 - >清洁将解决这个问题。


在这种特殊情况下,您似乎想要按钮的父级,在这种情况下,您需要像这样调用view.getParent(); :(这里我将类型转换为ViewGroup而不是LinearLayout,因为它确实无关紧要父母是哪种布局)

ViewGroup ll = (ViewGroup) view.getParent();

如果您只有一个ID为tViewChDoa的视图,则在获得该视图之前无需获取LinearLayout,如果您的活动中包含此代码,那么这将有效:

TextView text = (TextView) findViewById(R.id.tViewChDoa);

答案 1 :(得分:2)

您在adjDoa(最终视图)中作为参数传递的视图是一个Button而不是LinearLayout!

因此无法将其强制转换为LinearLayout并引发此异常。

检查传递给此方法的参数