9

下位互換性パッケージとSDKレベル10を使用して、フラグメントを含むレイアウトを拡張しようとしています。jarファイルを取得して、プロジェクトのlibsフォルダーに配置しました。FragmentActivityを拡張しました。

XLarge画面デバイスでAPIレベル11で実行すると、すべてが完全に機能します。

レベル10に対してコンパイルに戻り、通常のサイズの画面で実行すると、新しいアクティビティが作成され、その中のフラグメントが膨張する時点で失敗します。

原因:java.lang.ClassNotFoundException:ローダー内のandroid.view.fragment dalvik.system.PathClassLoader [/data/app/com.motoappsummitagenda-1.apk] 04-01 01:07:14.311 2870 2870 E AndroidRuntime:at dalvik .system.PathClassLoader.findClass(PathClassLoader.java:243)

つまり、互換性バージョンのandroid.support.v4.app.Fragmentではなく、どこかでandroid.view.fragmentを探しているように見えます。もちろん、android.view.fragmentはAPIレベル10では見つかりません。しかし、そのandroid.view.fragmentはどこから来ているのでしょうか。

膨張しているXMLは

<?xml version="1.0" encoding="utf-8"?>
<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="com.motorapp.SessionFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/sessionfragment">
</fragment>

そのためのコードは次のように始まります。

package com.motorapp;

import java.util.List;
import java.util.ListIterator;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import android.support.v4.app.*;
import android.support.v4.util.*;
import android.support.v4.*;
import android.support.v4.widget.*; 

public class SessionFragment extends android.support.v4.app.Fragment {

症状はこの問題に似ていますが 、互換性パッケージandroidでフラグメントを膨らませるという間違いはありません

android.compatibility.v4.android-support-v4 jarファイルは、Eclipseの[プロジェクト]>[プロパティ]>[Javaビルドパス]のビルドパスにあります。

私はマニフェストにあります(そして私は名前のさまざまなバリエーションを試しました)。

フラグメントの使用を開始するにあたり、私は最初にハニカムデバイスでAPI 11を使用しましたが、それはすべて完全に機能します。私がこの問題を抱えているのは、互換性ライブラリで動作する同じコード(わずかに異なる互換性APIを使用するように変更された)を取得することです。どんなアイデアでも大歓迎です。ありがとう、ピーター

4

7 に答える 7

41

Android API 8マシン(Samsung Galaxy S)でこの問題を解決しました。

Activityクラスをに変更してくださいFragmentActivity

  1. public class FragmentLayout extends Activity {} -> public class FragmentLayout extends FragmentActivity {}

  2. public static class DetailsActivity extends Activity {} -> public static class DetailsActivity extends FragmentActivity {}

  3. 最後に getFragmentManager()->getSupportFragmentManager()

  4. android-support-v4.jarをEclipseの参照ライブラリに登録します

  5. android-support-v4.jarを{プロジェクトのルートディレクトリ}/libsディレクトリに配置します

  6. simple_list_item_activate_1からAPI10列挙型(例:simple_list_item_1)に変更します

  7. import android.support.v4.app.Fragment;

于 2011-04-08T07:24:26.327 に答える
15

私は互換性ライブラリで同じ間違ったクラスの問題を抱えていて、運が悪かったので上記のすべてを試しました。Fragment私はついにそれを理解しました:私は正しいものではなく間違ったXML要素を使用していましたfragment。キャピタライゼーションは重要なようです。

于 2012-01-05T07:42:07.830 に答える
7

私はあなたがあなたのsetConetentView前に電話しようとしているに違いないsuper.onCreateFragmentActivity

于 2011-04-08T08:12:29.893 に答える
2

Honeycomb以前のデバイスで実行されているアプリでまさにこの問題が発生しました。フラグメントのコーディングは、DianneHackbornの2011年2月のブログ投稿およびその他の標準的なフラグメントの参考資料に記載されている例に基づいています。問題の解決策は、SDKリファレンスリンクhttp://developer.android.com/sdk/compatibility-library.html#Usingに含まれています。フラグメントを含むアプリで互換性ライブラリを使用してデプロイする場合に使用する必要があるクラス名とメソッド名には、わずかな違いがあります。リンクはこれを説明しています。

ダウンロードおよびインストールされた互換性ライブラリには、フラグメントを使用したサンプルコードが含まれています。参照:Android開発者>リソース>サンプルコード>API4+サポートデモ

于 2011-09-13T11:34:18.627 に答える
1

あなたが提供したインポートはすべて正しく見えます。他のクラスを再確認して、Eclipseが間違ったフラグメントをどこかに自動インポートしていないことを確認してください。重要なもう1つの点は、互換性ライブラリをlib \に追加する必要があることです。これは、プロジェクトのルートで作成して、アプリに確実にバンドルされるようにする必要があります。必要かどうかはわかりませんが、プロジェクトのビルドパスで常にそのコピーを参照するようにしています。

レイアウトにクラスパラメータがないようです。レイアウトで名前を使用したクラスを使用するつもりだったと思います。

<fragment class="com.example.<class to path to your fragment>" android:id="@+id/items"
    android:layout_weight="1" android:layout_width="0px"
    android:layout_height="fill_parent" />

Eclipseでは、参照ライブラリとライブラリの両方の下にandroid-support-v4.jarが表示されます。

于 2011-04-07T16:15:39.743 に答える
0

ビルドパスからandroid-support-v4.jarを削除する必要があると思います。これにより、Eclipseの参照ライブラリから削除されます。creaceフォルダーlibsよりもそこにjarファイルを置きます。プロジェクトをクリーンアップすると、EclipseがjarをAndroidの依存関係に追加します。クラスが見つからないという例外に苦労していたので、これは私にとってトリックでした。

于 2012-05-10T13:17:35.713 に答える
0

私は

 java.lang.NoClassDefFoundError: com.android.example.SupportFragment
    at com.android.example.SupportFragmentActivity.onCreate()

の上

SupportFragment extends SherlockFragment implements PopupMenu.OnMenuItemClickListener
...
    @Override
    public boolean onMenuItemClick(android.view.MenuItem item) {
        return onOptionsItemSelected(item);
    }

api17アプリをapi8と互換性を持たせようとすると、上記のlogcatエラーのみが表示されたため、このエラーが発生した場合は、インポートしたすべてのクラスがサポートされていることを確認してください。

于 2013-03-22T11:48:14.293 に答える