2017-05-30 12 views
0

Androidの場合、私はAFragというクラスを持っています。サブクラス(ex.BFrag)からアクセス可能な保護されたフィールドを作成することが可能かどうか疑問に思っています。サブクラスが保護されたフィールドに割り当てられている参照にアクセスします。Javaで保護された変数アクセスと変更のルール

public class AFrag extends Fragment 
{ 
    protected EditText someEt;... 
} 

public class BFrag extends AFrag 
{ 
    @Override 
    onCreateView() 
    { 
      someEt = (EditText) rootView.findViewById(R.id.EditTextinBFragXml);... 
    } 
} 

BFragはchildFragmentとしてAFrag内にロードされます。 someEt.getText()のように、AFragの変数にアクセスしているときにNullPointerExceptionがスローされます。私の質問は、BFragのXMLへの参照は、AFragに戻って存在するのですか?

私は、UI EditTextビューの固有のセットを持つ複数の動的に読み込まれたフラグメントを持っています。私はすべてのオブジェクトのgetText()を呼び出す "保存"ボタンをホストする単一の親フラグメントを持っていたいと思います。それぞれの子フラグメントのビュー。

答えて

1

プロテクトされた変数は、同じパッケージ内にあるときにサブクラスでアクセスできます.BFragが異なるパッケージにある場合、サブクラスのスーパークラスの保護された変数にアクセスできません。

+0

フラグメントは同じパッケージに入っています。私の質問は、スーパークラスが保護された変数に設定されたサブクラスの参照にアクセスできるかどうかです。私のユースケースでは、スーパークラスの変数は、サブクラスが初期化した後でもまだnullです。 –

+0

"私の質問は、スーパークラスは、保護された" - >スーパークラスに設定されたサブクラスがパブリック変数であってもサブクラスにある変数にアクセスできないという参照にアクセスできるかどうかです。 「サブクラスがそれを初期化した後、私のユースケースのスーパークラスの変数は、まだnullでは」 - > –

+0

「サブクラスは、それを初期化した後、私のユースケースのスーパークラスの変数には、まだnullである」 - > 'publicクラスBFragはAFrag { を拡張します@Override onCreateView(){ someEt =(のEditText)rootView.findViewById(R.id.EditTextinBFragXml); ...} } 'あなたが来ているどの値をチェックsubclass.Pleaseするために、スーパークラス変数を初期化しようとしています(EditText)rootView.findViewById(R.id.EditTextinBFragXml) –

0

BFragrootViewは、現在のフラグメントが表示されないAFragのrootViewので

BFRagで、someEt

しかし、変数が懸念している限り、あなたは意志が存在しないので、あなたが、NullPointerExceptionを取得します参照することができます。あなたのスーパークラスはアプリケーションメモリ内に存在するはずです。

+0

AFragが変数(例:getText())にアクセスすると、NullPointerExceptionがAFragからスローされます。変数の参照はBFrag内で設定されます。 –

+0

アイデアは同じですが、アイヴは逆の説明をしています – Stallion

関連する問題