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

and*_*ndo 0 android button android-linearlayout

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

LinearLayout ll = (LinearLayout) view;
Run Code Online (Sandbox Code Playgroud)

我的方法看起来像这样:

 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();
}
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

Sim*_*erg 11

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


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

ViewGroup ll = (ViewGroup) view.getParent();
Run Code Online (Sandbox Code Playgroud)

如果您只有一个带有id的视图,则在获取该视图之前tViewChDoa不需要LinearLayout获取该视图,如果您在活动中有此代码,那么这将起作用:

TextView text = (TextView) findViewById(R.id.tViewChDoa);
Run Code Online (Sandbox Code Playgroud)