android.widget.ImageView无法强制转换为android.view.ViewGroup

时间:2013-09-04 06:55:53

标签: android-fragments android-webview android-imageview android-fragmentactivity classcastexception

在Android应用中,点击菜单按钮后,MainActivity应该用WebView片段替换ImageView片段。相反,它抛出:

java.lang.ClassCastException:android.widget.ImageView无法强制转换为android.view.ViewGroup

在Eclipse中我清理了项目,删除了R文件,按照其他线程中的建议检查了XML文件,但没有运气。

如果你能提供帮助,非常感谢。

public class MainActivity extends FragmentActivity implements PhotoFragment.Callbacks {

[...]

public void onButtonInfoClicked(int index) {
    WebFragment web_f = WebFragment.newInstance(1, "Web Fragment");
    web_f.setIndex(index);

    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();       

    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.replace(R.id.photoView, web_f);
    fragmentTransaction.commit();
}

fragment_photo.xml

<ImageView
    android:id="@+id/photoView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="top"
    android:scaleType="fitXY" />

web_view.xml

<WebView
    android:id="@+id/webView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="top"
    android:scaleType="fitXY" />

1 个答案:

答案 0 :(得分:1)

我发现了问题所在。

我试图传递用于构建片段的ImageView(R.id.photoView)的资源ID,而不是实际的片段。由于此片段不是从布局创建的,我需要使用其对象引用并传递其containerViewId:

// fragment previously created in MainActivity:
PhotoFragment f = PhotoFragment.newInstance();

所以要解决我替换的问题:

fragmentTransaction.replace(R.id.photoView, web_f);

使用:

fragmentTransaction.replace(((ViewGroup)f.getView().getParent()).getId() , web_f);