2016-05-25 6 views
0

私のコードはこのプロジェクトでは膨大なので、私の知る限りにおいて何が起こっているのかを要約してみます。私はフォーラムを見て、この問題を修正する際に複数のルートを試しました。私はそれが私が行方不明であることが明らかであることを望んでいる。findviewbyidは、他のフラグメントでNumberPickerを検索しようとしたときにnullを返します。

新しいプロジェクトウィザード中にアンドロイドスタジオが作成するtablayoutプロジェクト、4つのタブ(各タブには独自のフラグメントがあります)を使用しました。私はonclicklistenerは私の問題2.フラグメント上numberpickerの値を変更しようとしている必要がありフラグメント1で

numberpicker上の私のが戻ってくるヌル保持していることです。私はの複数のフォーマットを試して、nullを返すようにしています。

基本的に私は別のフラグメント上のオブジェクトにアクセスしようとしており、はそのオブジェクトを見つけることができません。

otherpck = (NumberPicker) getActivity().findViewById(R.id.pckOther); 
otherpck.setValue(5); 

私はそれがヌルにotherpckを設定し、フラグメント2にpckOtherを見つけようとしてフラグメント1上のボタンのonclicklistenerに上記のコードを実行した場合。

すべての断片が膨張しています。私はすべてのタブをクリックし、次にfragment1のボタンをクリックしてもnullを取得できます。

ご協力いただきありがとうございます。

+0

を、一般的には、フラグメント間の通信は、活動を通して行われるべき。 – Egor

+0

2番目のフラグメントレイアウトを膨張させ、膨張したレイアウト(ビュー)でそのピッカーにアクセスするとどうなりますか?しかし、あなたはこれを行う必要はありません@Egorのコメント –

+0

@エーゴーを読んで - 私はmainactivityのメソッドをフラグメント2を変更する呼び出しますか?私はそれを試み、同じ問題を持っています – Will

答えて

0

他のアクティビティ/フラグメントからフラグメントのビューに直接アクセスしないでください。アンドロイドはあなたのアクティビティを管理し、必要に応じてそのアクティビティを一時停止/停止するためです。あなたがアクティビティBにいると想像して、あなたが昼食に行くと30分後にアクティビティBが再開されますが、非常に大きなチャンスがあります。アンドロイドはあなたのアクティビティAを殺しました。そのビューにアクセスしようとするとヌルを返します。

代わりに、これらのオプションのいずれかを使用できます。

バンドルを使用します。意図

のputExtra()ショートカットメソッドを使用)

Intent mIntent = new Intent(this, Example.class); 
Bundle mBundle = new Bundle(); 
mBundle.extras.putString(key, value); 
mIntent.putExtras(mBundle); 

3新しいバンドルを作成

Intent mIntent = new Intent(this, Example.class); 
Bundle extras = mIntent.getExtras(); 
extras.putString(key, value); 

2): http://developer.android.com/reference/android/os/Bundle.html

1)意図からバンドルを使用

Intent mIntent = new Intent(this, Example.class); 
mIntent.putExtra(key, value); 

次に、起動したアクティビティでは、

String value = getIntent().getExtras().getString(key); 

これは適切な方法です。別の方法はSharedPreferencesです。 http://developer.android.com/training/basics/data-storage/shared-preferences.html

0

作成されていないアクティビティに添付されている場合は、表示することはできません。フラグメントがあなたのアクティビティにまだ添付されていない場合、あなたのアクティビティはそのビューにアクセスできません。

+0

ご意見ありがとうございますが、問題は既に解決されています。また、前に、すべてのフラグメントが既に膨張していたと述べました。 "すべてのフラグメントが膨らんでいます。すべてのタブをクリックしてから、fragment1のボタンをクリックしてもnullになります。 「まだ」膨張していないわけではありませんが、そのアンドロイドは膨張した後にそれらを閉じてしまっていました。 – Will

0

この行に置き換えます。この線で

otherpck = (NumberPicker) getActivity().findViewById(R.id.pckOther); 

:あなたが直接、別のフラグメントのビューにアクセスしようとすべきではない

otherpck = (NumberPicker) findViewById(R.id.pckOther); 
関連する問題