8

私はちょうどhttp://developer.android.com/training/basics/firstapp/starting-activity.htmlチュートリアルに従って、Android 開発を始めたところです。どちらも「Android アクティビティ」作成ウィザードを使用して作成されたクラス:

public class PlacesActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_places);
        // I manually commented out the following line to get it to compile.
        // getActionBar().setDisplayHomeAsUpEnabled(true);
    }
    // ... other methods
}

public class ShowOnePlace extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_one_place);
        getActionBar().setDisplayHomeAsUpEnabled(true);
    }
    // ... other methods
}

Eclipseは私に次のエラーを与え続けました:

呼び出しには API レベル 11 が必要です (現在の最小値は 8): android.app.Activity#getActionBar

呼び出しには API レベル 11 が必要です (現在の最小値は 8): android.app.ActionBar#setDisplayHomeAsUpEnabled

行の1つをコメントアウトするまで(上記のように)。これで、アプリケーションはエラーなしで Android デバイス上でコンパイルおよび実行されるようになりました。(まあ、少なくともそのエラーなしで)。

そう:

  • getActionBar().setDisplayHomeAsUpEnabled(true);あるクラスでそのエラーが発生するのに、他のクラスではまったく同じ行がエラーではなく、警告でさえないのはなぜですか?
  • 「Android アクティビティ」作成ウィザードにバグがありgetActionBar().setDisplayHomeAsUpEnabled(true);ますか? あるアクティビティではそのステートメントが間違っていますが、他のアクティビティでは完全に問題ありませんか?
  • Eclipse Lint にバグがあり、そのステートメントは実際には両方のアクティビティで問題ない (または両方のアクティビティで間違っている) のでしょうか?
  • minSdkVersion="8" を minSdkVersion="11" に変更せずにこれを修正するにはどうすればよいですか? 「android-support-v4.jar」ファイルは、バージョン 8 デバイスで実行され、バージョン 11 デバイスでネイティブに処理されるものを処理する互換性ライブラリであるという印象を受けました。
  • このエラーが表示された場合、本当に正しいことは何ですか?
4

7 に答える 7

16

getSupportActionBar()の代わりに使用しgetActionBar()ます。これにより、11 未満の API レベルでActionBar機能が提供されます。

于 2014-04-29T08:44:25.940 に答える
14

つまり、Action Bar は古いバージョンの Android では利用できず、Google のサポート ライブラリもその機能を提供していません。これが、lint が不平を言っている理由です。アプリがサポートする最小 API レベルとして設定されている API バージョン 8 に存在しないコードを使用しています。古いバージョンの Android でアクション バーを使用する場合は、"Action Bar Sherlock" というオープン ソース ライブラリを使用します。

さて、あなたの質問に答えるために

  1. これは、両方のクラスでエラーになるはずです。クラスのいずれかでエラーではない理由は、実際には重要ではありません。
  2. いいえ
  3. どちらの活動でも間違っている
  4. 古いAndroidバージョンでアクションバーを提供するオープンソースライブラリを使用する必要があります。つまり、ActionBar Sherlockはこの目的に最適です
  5. 本当に正しいことは、Android Developers Web サイトを開いて、サポート ライブラリの制限について読むことです。
于 2012-11-30T23:01:58.530 に答える
4

appcompat-v7 以降を使用する場合、両方に同じ属性が定義されているため、actionbarsherlock を使用できません。したがって、このライブラリにはリソースの競合があります。

必要なサポート ライブラリでそれを行うには: (サポート ライブラリを既にダウンロードしてプロジェクトに統合していることを願っています)

  1. サポート ライブラリの ActionBar を使用する必要があるため、適切な ActionBarActivity 実装でアクティビティを拡張する必要があります。

インポート:

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;

アクティビティ:

public class PlacesActivity extends ActionBarActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_places);
        // I manually commented out the following line to get it to compile.
        // getActionBar().setDisplayHomeAsUpEnabled(true);
    }
    // ... other methods
}

古いバージョンでサポートされているアクティビティから actionBar 実装を取得できます。

 ActionBar actionBar = activity.getSupportActionBar();

コードを書いて楽しんでください!

于 2014-06-14T14:55:19.757 に答える
3

通常は「@TargetApi(12)」アノテーションで修正します

   @TargetApi(11)
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_show_one_place);
      getActionBar().setDisplayHomeAsUpEnabled(true);
   }
于 2014-12-02T21:32:01.560 に答える
1
Why is "getActionBar().setDisplayHomeAsUpEnabled(true);" give that error in one class, but that exact same line is not an error -- not even a warning -- in the other class?

2 番目のファイルを編集して保存するだけです。エラーになります!

Is there a bug in the "Android Activity" creation wizard, and somehow that "getActionBar().setDisplayHomeAsUpEnabled(true);" statement is wrong in one activity, but perfectly fine in the other?

多分

Is maybe there a bug in Eclipse Lint, and that statement is actually OK in both activities (or perhaps wrong in both activities)?

与えられた文脈では両方とも間違っている

What do I have to do so that I can fix this without changing minSdkVersion="8" to minSdkVersion="11"? I was under the impression that the "android-support-v4.jar" file was a compatibility library that ran on version 8 devices to handle stuff that's handled natively in version 11 devices.

変更する必要がありminSDKます。他に選択肢はないと思います。FunctionsAPI 11を使用する場合

于 2012-11-30T22:28:04.310 に答える
0

androidmanifest を変更するだけです

なので

<uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="18" />
于 2014-09-27T16:27:56.897 に答える
-2

問題は、eclips で Android アプリを作成するときです。最小および最大の API サポートを選択するように要求し、デフォルトで eclips は最小として 8 を選択し、最大として 19 を選択します。上記のエラーが発生した場合、使用している関数のバージョンが 8 より大きいことを意味します。
この問題を解決するには、 AndroidManifest.xml ファイルに移動して、次のように変更します

<uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="19" />

デフォルトの minsdkversion は 8 です

于 2014-06-28T13:38:06.377 に答える