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, Я думаю, что ваш импорт отключен.

Другие вопросы по тегам