java.lang.ClassCastException: приведение объекта к его родителю
Я программист IOS, но я пытаюсь немного освоить Android, но у меня проблемы.
У меня есть следующий класс:
package com.example.fragmenttabhostdemo;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Tab1 extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.tab1, container, false);
}
}
Когда я пытаюсь запустить его, консоль говорит:
java.lang.ClassCastException: com.example.fragmenttabhostdemo.Tab1 cannot be cast to android.support.v4.app.Fragment
Есть идеи, что я делаю не так? Я думаю, что проблема возникает, когда я пытаюсь активировать фрагмент для своего макета приложения для Android и добавить несколько вкладок на хост:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tabHost = (FragmentTabHost) findViewById(R.id.tabhost);
tabHost.setup(this, getSupportFragmentManager(), R.id.tabcontent);
tabHost.addTab(tabHost.newTabSpec("Tab1").setIndicator("Lengueta 1"), Tab1.class, null);
tabHost.addTab(tabHost.newTabSpec("Tab2").setIndicator("Lengueta 2"),
Tab2.class, null);
tabHost.addTab(tabHost.newTabSpec("Tab3").setIndicator("Lengueta 3"),
Tab3.class, null);
}
Итак, я не знаю, что я делаю не так. Любые другие идеи, чтобы легко получить макет вкладки, я просто не могу это сделать.
П.Д. Я пытаюсь следовать этому руководству: http://www.androidcurso.com/index.php/tutoriales-android-basico/32-unidad-2-diseno-de-la-interfaz-de-usuario-vistas-y-layouts/452-fragmenttabhost
2 ответа
Ваш намек на эту часть прямо здесь:
android.support.v4.app.Fragment
Вы ведете регулярный Fragment
в поддержку Fragment
, Это сбивает с толку, потому что это два класса с одинаковыми именами, но расположенные в разных пакетах. По сути, если вы работаете с библиотеками поддержки, вам следует придерживаться всех типов поддержки. Имея это в виду, в вашем Tab1
класс, внесите следующие изменения в свои операторы импорта.
//import android.app.Fragment;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
Он говорит, что не может быть приведен к android.support.v4.app.Fragment
, В тебе Fragment
файл, у вас есть импорт android.app.Fragment
, Я думаю, что ваш импорт отключен.