2016-08-02 5 views
1

私はアンドロイドの開発者の初心者です。私は助けてください。 私は1つのアクティビティ(アクティビティ1)を "MORE"というボタンで表示しています。このボタンをクリックすると、別のアクティビティに移動します。これはうまくいく。 私は別のアクティビティを持っています(アクティビティ2)。 1つのチェックボックスをクリックすると、アクティビティ1で「MORE」ボタンが非表示になっている必要があります。 他の同様の質問がありましたが、エラーが発生していました。1つのアクティビティから別のアクティビティにボタンを非表示にするにはどうすればよいですか?

私はそれがこのエラーを投げている私は目に見えない

public void onClick(View view) { 

     Intent i; 

     switch (view.getId()) { 

      case R.id.checkBox2: 
       // set invisible button more in stock quotes 
       StockDetail.btn2.setVisibility(View.INVISIBLE); 
       break; 

      default: 
       break; 

    } 
} 

に設定アクティビティ2で1

public static Button btn2; 

活動にボタンが静的製:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button

Iこのリンクでも同様の質問が見つかりました: Android: Hide button from another activity 私はそれを正確にしましたが、それはまだありません。誰かが私を助けることができれば感謝します。ありがとう

+0

これを実現するためのインターフェイスをご利用ください。 Viewクラスで静的変数を使用しないでください。 – LvN

+0

静的ボタンを使用する代わりに、アクティビティ1でstatic intまたはboolean変数を1つ選択し、その変数の値を変更してアクティビティ1でonResume()メソッドを使用して変数値を確認し、それに応じて可視性を設定してください – Vickyexpert

+1

[Android - 別のアクティビティからボタンを制御する](http://stackoverflow.com/questions/7978245/android-to-control-the-button-from-another-activity) – faranjit

答えて

0

SharePreferenceファイルでisShow(boolean)などの変数を保存する必要があると思います。 activity1を開くと、sharepreferenceファイルで価値が得られます。 など:trueの場合は、ボタンの表示を設定します。

0

(ボタンのような)を使用する可能性のある変数を静的にしないでください。メモリリークの影響を受けやすい可能性があります。通常、これらを回避するためのさまざまなデザインパターンが用意されています。

Activity2Activity1からstartActvityForResult()を使用して開始することができます。この設定では、Activity1Activity2から何らかの結果を期待しています。あなたの場合、あなたのボタンの状態になります。詳細については、この[非常に小さい]公式トレーニングの文書:Getting a Result from an Activityをご覧ください。

問題がある場合はお知らせください。

0

あなたはこの

if(StockDetails.btn2 != null) 
{ 
    StockDetails.btn2.setVisiblity(View.Gone); 
} 
0

StockDetailが作成されるまで、これは動作しませんようにヌル点のチェックを適用することができます。また、そのためにあなたは以下のようなStockDetailクラス内の静的変数を作る行うことができます - それはあなたを助けるかもしれない上

public class StockDetail extends Activity{ 
public static int buttonVisibility=View.VISIBLE; 

@override 
public void onCreate(Bundle savedInstanceState){ 
    setContentView(R.layout.act2); 
    Button btn=(Button)findViewById(R.id.btn); 
    btn.setVisibilty(buttonVisibility); 

} 

とActivity1

public void onClick(View view) { 

     Intent i; 

     switch (view.getId()) { 

      case R.id.checkBox2: 
       // set invisible button more in stock quotes 
       StockDetail.buttonVisibility=View.INVISIBLE; 
       break; 

      default: 
       break; 

    } 
} 

からはしてみてください。

+0

これは完全に機能しました。どうもありがとうございます! –

+0

@Felipeそれがあなたを助けることを知ってうれしい。他の人にも役立つように、回答を受け入れてupvoteしてください。前もって感謝します。 :) – Aditi

関連する問題