私は最初のAndroidアプリをやっていて、ICS APIにまっすぐに行きたかった。これまで、スワイプ可能なActionBarを使用してアプリを作成しました。ビューページャーとフラグメントを使用したタブ。
ただし、何度もエラーが発生します。
実装方法によっては、「Android.support.v4.app.FragmentからAndroid.app.Fragmentに変換できません」という「タイプの不一致」エラーに常に戻ります。いずれかのインポート参照をすべて削除しようとしましたが、TabListener、FragmentActivity、および2つのFragmentsで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
}
}
「Android.app.FragmentTransaction ft」を削除し、「FragmentTransaction ft」に置き換えるだけで、問題はすぐに解決します。その後、新しい問題が発生します。
タイプTabListenerのメソッドonTabReselected(ActionBar.Tab、FragmentTransaction)は、スーパータイプメソッドTabListener.Javaをオーバーライドまたは実装する必要があります
タイプTabListenerのメソッドonTabSelected(ActionBar.Tab、FragmentTransaction)は、スーパータイプメソッドTabListener.Javaをオーバーライドまたは実装する必要があります
タイプTabListenerのメソッドonTabUnselected(ActionBar.Tab、FragmentTransaction)は、スーパータイプメソッドTabListener.Javaをオーバーライドまたは実装する必要があります
タイプTabListenerは、継承された抽象メソッドActionBar.TabListener.onTabReselected(ActionBar.Tab、FragmentTransaction)TabListener.Javaを実装する必要があります
タイプTabListenerは、継承された抽象メソッドActionBar.TabListener.onTabSelected(ActionBar.Tab、FragmentTransaction)TabListener.Javaを実装する必要があります
タイプTabListenerは、継承された抽象メソッドActionBar.TabListener.onTabUnselected(ActionBar.Tab、FragmentTransaction)TabListener.Javaを実装する必要があります
何が起きてる?
ご存知かもしれませんが、私はJavaおよびAndroid開発。初心者です。私はかなり近いと感じていますが、解決できませんこの問題。Android.app.Fragmentをどこにもインポートしていないのに、なぜAndroid.support.v4.app.FragmentからAndroid.app.Fragmentに変換したいのか理解できません。
互換性パッケージの使用に関連していると思います。 (SDKの最新バージョン用のアプリを作成するときに、このパッケージを使用する必要がありますか?)
代わりにgetSupportFragmentManager()
を使用してくださいgetFragmentManager()
何が起きてる?
Androidサポートパッケージは後方互換性のあるFragment
実装を提供しますが、ActionBar
はnotAndroidサポートパッケージ。そのため、ActionBar.TabListener
はネイティブAPIレベル11 Fragment
オブジェクトを想定しています。ActionBarSherlockを使用してアクションバーと= Androidサポートフラグメント。
しかし、FragmentPagerAdapterには別の問題が残っています
AndroidサポートパッケージのFragmentPagerAdapter
は少々厄介です-APIレベル11 Fragment
オブジェクトが必要で、AndroidサポートではありませんFragment
オブジェクト。ただし、ソースをFragmentPagerAdapter
(ソースはSDKにあります)に複製して、Fragment
およびkinのsupport.v4
フレーバーを使用する独自の実装を作成できます。
この質問に答えるのは遅すぎることは知っていますが、同じ問題を抱えている人を助けるかもしれません。
Javaフォルダーに移動し、フラグメントのアクティビティをクリックします。
インポートで、import Android.app.Fragment;
と
import Android.support.v4.app.Fragment;
MainActivityのコードをそのままにしておくと、問題の解決に役立ちます。
注:一度に機能しなくても心配する必要はありません。 ビルド>プロジェクトのリビルド。
このソリューションは私のために働く
取り替える
public class MyFragment extends Fragment{
}
と
public class MyFragment extends Android.support.v4.app.Fragment{
}
また、インポートを置き換えます
import Android.app.Fragment;
と
import Android.support.v4.app.Fragment;
ここをご覧ください:fragmentTransaction.add(R.id.main_container, new HomeFragment());
フラグメントを追加しますが、その後にreplace()
メソッドを使用します。したがって、add()
の代わりにreplaceを使用する必要があります。
昨日も同じ問題がありました。
ActionBarSherlockをカバーする本当に素晴らしい Samsungによるページ があります。左側のインポート/クラス/メソッドのいずれかを使用しているかどうかを確認し、右側のインポート/クラス/メソッドに置き換えます。
同じ問題がありました。インターフェイスをimplements ActionBar.TabListener
からimplements TabListener
に変更して解決し、このインターフェイス内にメソッドを実装します。また、あなたが言及したエラーについても言及しました。
サポートパッケージを削除することで問題を解決できます。以前のバージョンのアプリでAndroid 3.0以上の関数が必要な場合にのみ必要です。
あなたの場合、ICSからデフォルトのフラグメントとサポートパッケージからフラグメントの両方を取得します。異なるパッケージからオブジェクトを取得した場合、それらは連携しません。
短縮版; Honecombより上のapiレベルのいずれかを使用しますまたはサポートパッケージ、両方ではありません。