1

Androidフラグメントの内部では、アプリがタブレットで実行されているかどうかについて、次の簡単なチェックがあります(タブレットでは3つのビューが開いています。ビュー2と3は電話では表示されず、最初のビューのみが表示されます)

boolean mDualPane;
View detailsFrame = getActivity().findViewById(R.id.content1);
mDualPane = detailsFrame != null && detailsFrame.getVisibility() == View.VISIBLE;

これはフラグメント自体では正常に機能しますが、多くのフラグメントでまったく同じチェックが必要なため、複数のクラスで頻繁に使用されるメソッドに使用する「MiscMethods」クラスに入れたいと思いました。今、私のクラスの同じタラは次のようになります。

public class MiscMethods{    
public static boolean landscapeChecker(){
    boolean mDualPane;
    View detailsFrame = getActivity().findViewById(R.id.content1);
    mDualPane = detailsFrame != null && detailsFrame.getVisibility() == View.VISIBLE;
    return mDualPane;   
}
}

getActivity (およびその findViewById を削除した場合) は、タイプ MiscMethods に対して未定義です。

今、私はここのようなコンテキストのためのアプリケーションクラスを持っています

public static void ErrorToast(int errorCode) {
    String errorString = null;
    switch (errorCode) {
    case 1:
        errorString = App.getContext().getString(R.string.error_tooManyFieldsEmpty);
        break;
    case 2:
        errorString = App.getContext().getString(R.string.error_featureComingSoon);
        break;
    case 3:
        errorString = App.getContext().getString(R.string.error_SwitchBreak);
        break;
    default:
        errorString="Wrong Error Code";
        break;
    }
    Toast errormsg = Toast.makeText(App.getContext(), errorString, Toast.LENGTH_SHORT);
    errormsg.setGravity(Gravity.CENTER, 0, 0);
    errormsg.show();
}

しかし、この App.getContext() も役に立ちません。

どうすればこれを修正できますか?

4

2 に答える 2

3

迅速で汚い解決策を探しているように見えるので、ここに2つあります。

  • メソッドシグネチャを変更して、アクティビティをパラメータとして取得します。

    public static boolean landscapeChecker(Activity activity)

    activityこのメソッドでは、の代わりに渡されたものを使用しgetActivity()ます。のようなあなたの様々な活動からそれを呼んでくださいboolean mDualPane = landscapeChecker(this)

  • サブクラスActivity化し、代わりにメソッドをそこに配置します。このソリューションでは、クラスを作成してから、の代わりにMyActivity extends Activityさまざまなアクティビティを作成します。この方法では、の代わりにを使用します。extend MyActivityextend ActivitythisgetActivity()

于 2012-10-03T01:07:37.283 に答える
0

oncreate の前に MainActivity 静的要素を宣言するだけです。この後、下部にメソッドを作成します。

static TextView textView;

@Override
    protected void onCreate(Bundle savedInstanceState) {
.....................................................

textView = (TextView) findViewById(R.id.texview);
}

public static void upTex(String up) {


        textView.setText(up);
    }


}

//other file class
public class other{

   public void method(){
     upText("jaja");
 }
于 2017-06-28T16:19:19.037 に答える