3

В приложении для Android, нажав кнопку меню, MainActivity должен заменить фрагмент ImageView фрагментом WebView. Вместо этого, он бросает:android.widget.ImageView нельзя отнести к android.view.ViewGroup

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

я нашел, где проблема была.

Я пытался передать идентификатор ресурса ImageView (R.id.photoView), используемый для создания фрагмента, а не фактического фрагмента. Поскольку этот фрагмент не был создан из макета, мне нужно использовать его ссылку на объект и передать его 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); 
Смежные вопросы