2016-03-19 9 views
0

私はビューのリストビューを持つアダプタを持つフラグメントを持っています。 各ビューには、「はい」/「いいえ」の2つのボタンがあるカスタムダイアログを開くボタンがあります。 (正と負のラベル)。 これらのラベルのプレスのコールバックを実装する際に問題があります。私が使用しているカスタムダイアログで他のクラスのタグによるリストビュー内のビューの検索

、私は常にホストフラグメントのタグを送信し、その後のようなものをやっていた:

AlertDialogFragmentCallbacks initiator; 
initiator = (AlertDialogFragmentCallbacks) getFragmentManager().findFragmentByTag(mInitiatorFragmentTag); 
initiator.onAlertDialogPositiveClick(mId, this); 

それは断片で良い働いたが、今私のイニシエータではありませんフラグメントではなく、フラグメントのアダプタ内の単純なビューです。

デバッグ中に、私はmInitiatorFragmentTagが本当にビューのタグであることがわかります。そのタグを使用してそのビューを見つけるにはどうすればよいですか?

+0

クリックハンドラー内で何をする必要がありますか、またはアクセスする必要がありますか? –

+0

ユーザーがカスタムダイアログのポジティブラベルを押した場合、彼は新しいフラグメントに転送されています。 最初はアダプターのホスティングフラグメントでクリックコールバックを実装すると考えましたが、ビューに格納されているデータが必要です。 – BVtp

+0

それでは、ListViewアダプタによって生成された現在のアイテム用に生成されたビューからのデータと、フラグメントトランザクションを実行するためのアクティビティコンテキストが必要ですか? –

答えて

0

クリックを処理する専用のクラスを作成できます。そのコンストラクタを渡します。

  • 含まれるデータに対してアクセスするビュー階層のルートです。
  • フラグメントをホストしているアクティビティ参照。
  • トランザクションを完了するために必要な追加データ項目。たとえば、

(私はここにすべての詳細を持っていないので、私はものを作るんだ):

public class MyClickHandler implements WhateverClickInterface { 
    private View root; 
    private Activity activity; 

    public MyClickHandler(View root, Activity activity) { 
     this.root = root; 
     this.activity = activity; 
    } 

    public void whateverInterfaceMethod() { 
     // Access views for data 
     // Use activity to start a fragment transaction 
     // Close the dialog 
    } 
} 

その後、あなたはそれだろう、すべてのボタンに、このクラスの新しいインスタンスを登録することができますそれを呼び出す。

基本的には、クリックハンドラーにすべての関連データが提供されていることを確認して、進める方法を決定してください。

+0

ありがとうございます。 しかし、私が提案したように、データを外部に保存するのであれば、アダプターのホスティングフラグメントの中に保存してはどうですか? MyClickHandlerをフラグメントのプライベート内部クラスとして配置するか、データオブジェクトをフラグメントのプライベートメンバーとして保存し、各ボタンをクリックするだけで専用の関数を使用して更新しますか? – BVtp

+0

フラグメント内からすべてのデータを簡単に利用できるようにすることもできます。それはあなた次第です。多くの内部クラスを累積すると、コードが理解しにくくなるか、データを見つけるために各クリックハンドラで処理が多すぎる可能性があり、分割を開始する必要があります。 –

+0

ありがとうございます。私はその答えを受け入れた。ちょうど頼みたいと思っていた - 私の記事で述べたように、「イニシエータ」を使用することは、この場合の選択肢ではない?私はすべてのコードを参照しなければならないだろうフラグメントの – BVtp

関連する問題