0

Context が実際にどのように機能するかを理解するのに苦労しています。今は特に必要ありませんが、近いうちに必要になると思います...

と呼ばれるアプリと、それぞれいくつかのアクティビティでave呼び出されるライブラリ (それ自体がアプリ)を作成しました。xvfそれらのほとんどはトーストを通じて情報を提供するため、どこでも同じ方法を使用しています。

public void info(String txt) {
    Toast.makeText(getApplicationContext(), txt, Toast.LENGTH_LONG).show();
}

今、私はそのメソッドをライブラリのクラスとして配置し、アプリ クラスとライブラリ クラスの両方からどこからでも呼び出すことを考えました。のようにコンテキストを渡したくありませinfo.show(context, String)。クラスが呼び出されたときにコンテキストがどこにあるかをクラスinfoに推測させたいのです。

だから私はというクラスを作りましたinfo

package com.floritfoto.apps.xvf;

import android.app.Activity;
import android.content.Context;
import android.widget.Toast;

public class info extends Activity{
    private Context context;

    public info() {
        super();
        context = (Context)getApplicationContext();
    }
    public void show(String txt) {
        Toast.makeText(context, txt, Toast.LENGTH_LONG).show();
    }
}

次に、呼び出し元のアクティビティで、info のインスタンスを作成し、info.show(String). これは機能します。

extend Activity問題は、コンテキストを取得するだけではコストが高すぎるように思われることです...

私がやりたいことをする正しい方法はどれですか? 何かをする方が良いでしょうinfo(String)...コンストラクタを作成することは許可されていないことを覚えておいてください。それはinfo(Context, String)不正行為です。

4

1 に答える 1

2

私はそれが全くの盲目的な運によって働いていると思います。

で適切なアクティビティをインスタンス化することはできませんnew。Androidフレームワークにインスタンス化させる必要があります。この場合、アプリケーションコンテキストを取得しているため、機能しています。これは、パッケージの所有者が把握していると思います。

実際には、anActivityはそれ自体が(それを拡張する)ので、トーストを表示するときにContext使用できます。thisあなたがあなたのinfoクラスでそれをやろうとしたら、私はそれが失敗するだろうと想像します。とにかく、Ericが指摘したようContextに、ライブラリクラスにが必要な場合(これは適切なアクティビティではありません)、それを使用するためのパラメータとして渡す必要があります。

于 2012-12-23T21:34:16.617 に答える