我的原始布局xml文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/app"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0px"
android:background="#e4e8ed"
android:orientation="vertical"
android:padding="0px" >
<include
android:id="@+id/tabBar"
layout="@layout/tab" />
<Button
android:id="@+id/nist"
android:layout_width="301dp"
android:layout_height="63dp"
android:text="Generate NIST file" />
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rectangle"
android:layout_width="276dp"
android:layout_height="wrap_content"
android:background="@drawable/rectangle"
android:layout_gravity="center_horizontal">
<ToggleButton
android:id="@+id/toggleButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ToggleButton" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="128dp"
android:text="Button" />
</LinearLayout>
</LinearLayout>
但如果我移动内部Button
下面的LinearLayout
我的应用只是抛出异常:
LinearLayout cannot be cast to android.widget.Button
我认为这很奇怪,我怎么能这样做?
修改
这是我将按钮“导入”到我的java代码的方式:
setTabBar(R.layout.horz_scroll_app);
nist = (Button) findViewById(R.id.nist);
setTabBar
方法:
public void setTabBar(int id) {
LayoutInflater inflater = LayoutInflater.from(this);
scrollView = (MyHorizontalScrollView) inflater.inflate(
R.layout.horz_scroll_with_list_menu, null);
setContentView(scrollView);
menu = inflater.inflate(R.layout.horz_scroll_menu, null);
app = inflater.inflate(id, null);
ViewGroup tabBar = (ViewGroup) app.findViewById(R.id.tabBar);
ListView listView = (ListView) app.findViewById(R.id.list);
listView = (ListView) menu.findViewById(R.id.list);
ArrayList<MenuItem> menuItems = getMenuItems();
listView.setAdapter(new MenuCustomAdapter(this, menuItems));
btnSlide = (ImageButton) tabBar.findViewById(R.id.BtnSlide);
btnSlide.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
btnSlide.setImageResource(R.drawable.lincolor);
break;
case MotionEvent.ACTION_UP:
btnSlide.setImageResource(R.drawable.lin);
break;
}
return false;
}
});
btnSlide.setOnClickListener(new ClickListenerForScrolling(scrollView,
menu));
final View[] children = new View[] { menu, app };
int scrollToViewIdx = 1;
scrollView.initViews(children, scrollToViewIdx,
new SizeCallbackForMenu(btnSlide));
}
我还应该提一下,如果我在Button
内部添加其他元素,那么LinearLayout
元素只会出现此问题。
答案 0 :(得分:11)
尝试清理并重建项目,如果不起作用,请重新启动Eclipse。
答案 1 :(得分:1)
经历过同样的问题,是什么帮助了我:
确保您不使用view-element的默认ID(togglebutton,editText等)。
当您在布局中添加和删除相同类型的新元素时,它们似乎互相干扰。
因此,请始终使用个人ID。
答案 2 :(得分:-1)
要进一步广泛,对于所有可能也错过了代码中明显的内容的人(就像我一样):
确保您的Java代码没有按字面意义将布局转换为按钮:
public class MainActivity extends AppCompatActivity {
protected Button LL_vertical; //MISTAKE HERE
public void someFunction() {
//R.id.LL_vertical is a linearlayout
LL_vertical = view.findViewById(R.id.LL_vertical);
...
}
... rest of code ..
}
应该是
public class MainActivity extends AppCompatActivity {
protected LinearLayout LL_vertical; //MISTAKE FIXED
public void someFunction() {
//R.id.LL_vertical is a linearlayout
LL_vertical = view.findViewById(R.id.LL_vertical);
...
}
... rest of code ..
}