38

첫 번째 Android 앱을 만들고 ICS API를 바로 사용하려고합니다. 지금까지 ViewPager와 Fragments를 사용하여 스 와이프 가능한 탭이있는 ActionBar를 사용하는 앱을 만들었습니다.android.support.v4.app.Fragment에서 android.app.Fragment로 변환 할 수 없습니다.

그러나 저는 계속해서 오류가 발생합니다.

구현 방법에 따라 항상 "유형 불일치"오류로 계속 진행됩니다. "android.support.v4.app.Fragment에서 android.app.Fragment로 변환 할 수 없습니다."오류가 계속 발생합니다. 둘 중 하나에 대한 모든 가져 오기 참조를 제거하려고했는데이 오류는 tabListener, FragmentActivity 및 내 두 조각에서 android.support.v4.app.Fragment 만 사용할 때 나타납니다.

오류 내 TabListener에서 발생

import android.app.ActionBar; 
import android.app.ActionBar.Tab; 
import android.app.Activity; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.ViewPager; 
import android.util.Log; 

public class TabListener implements ActionBar.TabListener { 
    private android.app.Fragment fragment; 
    private Activity activity; 
    private ViewPager pager; 
    private FragmentTransaction ft; 

    public TabListener(Activity activity, Fragment fragment, ViewPager pager) { 
     this.activity = activity; 
     this.fragment = fragment; 
     this.pager = pager; 
    } 

    @Override 
    public void onTabSelected(Tab tab, android.app.FragmentTransaction ft){  
     if (fragment == null) { 
      ft.add(fragment, null); 
     } else { 
      ft.attach(fragment); 
     } 
    } 

    @Override 
    public void onTabReselected(Tab tab, android.app.FragmentTransaction ft){ 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft){ 
     // TODO Auto-generated method stub 
    } 
} 

그냥 "하여 FragmentTransaction 피트"로 대체 "android.app.FragmentTransaction 피트"를 제거함으로써, 문제는 awawy 간다. 그런 다음 새로운 문제가 발생합니다.

The method onTabReselected(ActionBar.Tab, FragmentTransaction) of type TabListener must override or implement a supertype method TabListener.java

The method onTabSelected(ActionBar.Tab, FragmentTransaction) of type TabListener must override or implement a supertype method TabListener.java

The method onTabUnselected(ActionBar.Tab, FragmentTransaction) of type TabListener must override or implement a supertype method TabListener.java

The type TabListener must implement the inherited abstract method ActionBar.TabListener.onTabReselected(ActionBar.Tab, FragmentTransaction) TabListener.java

The type TabListener must implement the inherited abstract method ActionBar.TabListener.onTabSelected(ActionBar.Tab, FragmentTransaction) TabListener.java

The type TabListener must implement the inherited abstract method ActionBar.TabListener.onTabUnselected(ActionBar.Tab, FragmentTransaction) TabListener.java

What 's going here?

이해할 수 있겠지만 저는 Java 및 Android 개발을 처음 사용합니다. 나는 거의 비슷해 보이지만이 문제를 해결할 수는 없습니다. 나는 android.app.Fragment에서 android.app.Fragment로 변환 할 이유가 무엇인지 이해하지 못한다. 어디서나 android.app.Fragment를 가져 오지 않을 때라도

나는 그것이 (최신 버전의 SDK 용 앱을 만들 때이 패키지를 사용해야합니까?)

답변

0

지원 패키지를 제거하면 문제가 해결됩니다. 이전 버전의 앱에서 Android 3.0 이상의 기능이 필요할 때
ICS의 기본 조각과 지원 패키지의 조각을 모두 얻을 수 있으며, 다른 패키지에서 개체를 가져 오는 경우 함께 일하지 마라.

짧은 버전; Honecomb 또는 위의 API 수준을 지원 패키지 중 하나만 사용하십시오. 둘 다 사용할 수는 없습니다. 안드로이드 지원 패키지는 당신에게 이전 버전과 호환 Fragment 구현을 제공하는 동안

+0

나는 알고 있습니다. 지원 패키지를 사용할 필요가 없어지려고했지만 FragmentPagerAdapter에 다른 문제가 생겼습니다. "android.app.FragmentPagerAdapter"로 가져올 수 없습니다. > 반환 유형이 FragmentPagerAdapter.getItem (int)과 호환되지 않습니다. MainFragmentActivity.java Fragment mFragment = LatestFragment.newInstance (position)입니다. – SLekvak

+1

API 레벨 11 이상의 빌드 타겟을 가지고 * and * Android Support 패키지를 사용하는 것이 합리적입니다. – CommonsWare

+0

@CommonsWare : 지원 패키지 (v4)가 API 레벨 11 (v13 패키지가 내 마음에 들지 않음)의 기능을 기반으로 작성되었지만 op의 경우 ICS (API> 13) 용으로 개발할 때 패키지 내용물이 추가 패키지없이 지원되어야합니까, 아니면 제가 잘못 되었습니까? – Jave

14

Whats going on here?

ActionBar은 안드로이드 지원 패키지의 하지 부분이다. 따라서 ActionBar.TabListener은 원시 API 레벨 11 Fragment 개체를 필요로합니다. ActionBarSherlock을 사용하여 작업 표시 줄과 Android 지원 부분을 모두 고려하십시오.

but then I'm left with another problem in my FragmentPagerAdapter

안드로이드 지원 패키지의 FragmentPagerAdapter 조금 지저분한 - 그것은 API 레벨 11 Fragment 객체가 아닌 안드로이드 지원 Fragment 객체를 원한다. 그러나 소스를 FragmentPagerAdapter (소스가 SDK에 있음)으로 복제하고 support.v4 flavor의 Fragment 및 친족을 사용하는 자체 구현을 만들 수 있습니다.

+0

FragmentPagerAdapter를 복제하고 android.app.Fragment/import android.app.FragmentManager/import android.app.FragmentTransaction이 효과가있는 것으로 보인다. 이번에는 오류가 없다! 감사합니다 – SLekvak

+0

SLekvak, api 11 및 하위 장치 또는 api 13+에서 구현 작업을 수행합니까? – MattF

116

getSupportFragmentManager() 대신 getFragmentManager()

+0

TutViewerFragment 뷰어 = (TutViewerFragment) getSupportFragmentManager(). 시도해보십시오 findFragmentById (R.id.tutview_fragment); 그러나 "단편에서 TutView 단편으로 변환 할 수 없습니다"오류 메시지가 나타납니다. – Newts

+0

TutViewerFragment의 상위 항목은 무엇입니까? – gayavat

+0

FragmentActivity – Newts

0

어제 같은 문제를 했어 사용해보십시오.

ActionBarSherlock을 다루는 정말 멋진 page by Samsung이 있습니다. 왼쪽의 가져 오기/클래스/메소드 중 하나를 사용했는지 확인하고 오른쪽의 가져 오기/클래스/메소드로 바꿉니다.

0

나는 동일한 문제가있었습니다. 인터페이스를 implements ActionBar.TabListener에서 implements TabListener으로 변경 한 다음이 인터페이스 내에 메소드를 구현하여 해결했습니다. 그것도 당신이 언급 한 오류를 언급했다.

4

나는이 질문에 답하기에는 너무 늦었지만 동일한 문제를 가진 누군가를 도울 수 있음을 알고 있습니다.

폴더로 이동하여 조각 활동을 클릭하십시오. 수입에서

MainActivity 그대로의 코드를 유지

import android.support.v4.app.Fragment;

import android.app.Fragment;을 교체하고이 문제를 해결하는 데 도움이됩니다.

참고 : 한 번에 작동하지 않는 경우에도 걱정하지 마십시오. 빌드> 프로젝트 재구성.

4

This solution works for me

public class MyFragment extends Fragment{ 
} 

public class MyFragment extends android.support.v4.app.Fragment{ 
} 

를 교체하고도

로 수입

import android.app.Fragment; 

교체

관련 문제