0

同じアクティビティに 2 つのフラグメントが並んでいます。右側のフラグメント (フラグメント B) のボタンをタッチすると、左側のフラグメント (フラグメント A) の TextView を更新する必要があります。これを行うための最良の方法を探しましたが、私のニーズに合ったものは何もないようです。誰かがこれをどのようにコーディングするかの例を教えてもらえますか? フラグメント A は XML レイアウトを介して設定され、フラグメント B はプログラムによってコンテナーに読み込まれます。フラグメント A のメソッドを使用してテキストを更新し、親アクティビティのメソッドからそのメソッドを呼び出すことで、これを達成しようとしました。次に、フラグメント B から親アクティビティのメソッドを呼び出します。

これは、インターフェイスを宣言し、インターフェイスのメソッドを呼び出すフラグメント B のコードです。

AttackCards attackCards; 

public interface AttackCards {
    public void deckSize();
}

public void onAttach(DeckBuilder deckBuilder) {
    super.onAttach(deckBuilder);

        attackCards = (AttackCards) deckBuilder;
        }

attackCards.deckSize(); //this is in my onclick methods

これは、インターフェイスを実装し、フラグメント A のメソッドを呼び出すアクティビティのコードです。

public class DeckBuilder extends Activity implements AttackCards{

public void deckSize() {
    DeckBuilderFragment deckBuilderFragment = (DeckBuilderFragment)getFragmentManager().
            findFragmentById(R.id.deckbuilder_fragment);
    deckBuilderFragment.deckSize();
}

これは、テキストビューに共有設定値の内容を追加するフラグメント A のメソッドです。

public void deckSize() {
deckSize = (TextView) getView().findViewById(R.id.decksize);  
final SharedPreferences defaultDeck = getActivity()
        .getSharedPreferences("defaultDeck", Context.MODE_PRIVATE);
deckSize.setText(String.valueOf(defaultDeck.getInt("decksize", 0)));
}

悲しいことに、この試みは、ボタンに触れると単に nullpointer をもたらします。でヌルポインターを取得しています

attackCards.deckSize(); //this is in my onclick methods

これを正しく行う方法の例を教えてください。

4

2 に答える 2

3

1 つのフラグメントが別のフラグメントと直接通信することはできません。これは、付属のアクティビティを通じて行う必要があります。コード例を含む詳細な説明は、こちらで入手できます

Android デベロッパー サイト

フラグメント B でインターフェイスを宣言し、アクティビティでインターフェイスを実装します。ボタンがクリックされたときに、フラグメント B のコールバックを介してインターフェイスを呼び出します。フラグメント A にパブリック関数を使用して TextView を更新できるため、アクティビティは関数を直接呼び出してテキストを更新します。

于 2013-10-03T03:28:52.730 に答える