2016-05-09 21 views
2

私はそうのように、NFCスキャナを実装しましたし、タグがスキャンされたときにonNewIntentメソッドが正常に呼び出されます:resolveIntentPreference Activityで現在のフラグメントを取得する方法は?

@Override 
protected void onNewIntent(Intent intent) { 
    setIntent(intent); 
    resolveIntent(intent); 
} 

私はスキャンしたタグに基づいてUIを更新したいです。問題は、フラグメントへの参照を取得する方法を見つけることができないということです。

私はフラグメントのホールドを取得するためにisValidFragmentメソッドを使用することができると思ったが、今のところ運で:だから

protected boolean isValidFragment(String fragmentName) { 

    if (fragmentName != null && !fragmentName.equals("")) { 
     Fragment f = getFragmentManager().findFragmentById(R.id.myFragment); // this is always null 
     if (f != null && f instanceof MyFragment) 
      myFragment = (MyFragment) f; 
    } 

    return PreferenceFragment.class.getName().equals(fragmentName) 
      || GeneralPreferenceFragment.class.getName().equals(fragmentName) 
      || MyFragment.class.getName().equals(fragmentName); 
} 

、基本的には私が必要とする唯一のものは、現在のフラグメントへの参照ですそれがMyFragmentであるかどうかを確認してから、UIを更新するメソッドを呼び出す必要があります。

似たような質問がいくつか見つかりましたが、それでもわかりません。私はまた、インターフェイスを使用してコールバックを試みたが、私はまだ断片を参照する方法を知らない。

EDIT:これはpref_headers.xmlファイルです:あなたはフラグメントを初期化するときは、フラグメントを確認したいとき

<preference-headers xmlns:android="http://schemas.android.com/apk/res/android"> 
    <header 
     android:fragment=".SettingsActivity$GeneralPreferenceFragment" 
     android:title="@string/pref_header_general" /> 
    <header 
     android:fragment=".SettingsActivity$MyFragment" 
     android:id="@+id/myFragment" 
     android:title="Test" /> 
</preference-headers> 
+0

"getFragmentManager()。findFragmentById(R.id.myFragment)" というスニペットを使用するには、XMLファイルのフラグメント要素にIDを与える必要があります。これは、xmlの指定された要素から参照を取得する方法です。あなたのアーキテクチャに関する情報をもっと投稿できるなら、それを達成する方法があるかもしれません。 –

+0

スキャナアクティビティのように見えます。スキャンが成功すると詳細アクティビティが開始されます。詳細アクティビティは3つの異なるフラグメントの1つを膨張させて、UIのさまざまな種類のオブジェクトの詳細を表示します。右? –

+0

@EmreAktürk 'pref_headers.xml'ファイルのスニペットを使って私の投稿を更新しました。私はそこに断片のIDを入れましたが、それは認識されていないようです。 – Apostrofix

答えて

-1

あなたは、この

mFT = mFragmentManager.beginTransaction(); 
mFT.replace(R.id.container, fragment, "myFragment"); 
mFT.commit(); 

のようなフラグメントにタグを設定することができますタグで取得できます

if (fragmentName != null && !fragmentName.equals("")) { 
    Fragment f = getFragmentManager().findFragmentByTag("myFragment"); 
    if (f != null && f instanceof MyFragment) 
     myFragment = (MyFragment) f; 
} 

助けてくれるといいです

+0

残念ながら、私はそれを実際には初期化しません。代わりに、Googleの例のように 'pref_headers.xml'ファイルを使用しました。 – Apostrofix

+0

2番目のオプションは、 'android.support.v4.app.Fragment;'を取り込み、 'android.app.Fragment'で置き換えることです。 – Max

+0

これはすでに' android.app 'です。フラグメント ' – Apostrofix

0

ヘッダークラ​​スが拡張されていません。だからあなたはいつもヌルオブジェクトを得るのです。あなたは、多形を持たない別のものにオブジェクトをキャストしようとしています。また、フラグメントのようにビューを見つけようとしています。

DDMSを開き、PreferenceActivityの仕組みを理解するためにView Hiearchをダンプしようとします。それは与えられたxmlを解析し、別のビューコンポーネントを膨張させてUIを構築するように見えます。

多分、あなたはそれをfindViewByIdにしようとするか、UIを変更するために異なる設定のXMLファイルをロードすることができます。

+0

でも、ヘッダーはヘッダーが "class"タグを持っていると思っていません。あなたのフラグメントをロードしないかもしれません:/しかし、私はこれについては分かりません。 –

2

PreferenceActivityで、オーバーライド方法onAttachFragment。ここでクリックするとフラグメントを参照できます。

@Override 
    public void onAttachFragment(Fragment fragment) { 
     super.onAttachFragment(fragment); 
    } 
関連する問題