2016-12-07 5 views
0

私は、ボキャブラリを練習するためにAndroidでフリップアニメーションを使用しようとしています。フリップカードでデータを動的に変更するAndroidを使用しているフラグメント

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="100dp" 
    android:onClick="flipCard" 
/> 

と二つの断片:fragment_card_flip.xmlfragment_card_back.xml私は私のフラグメントのための容器を行いました。 1つは、カードの裏に意味を表示するためのものです。

ランダムにデータベースから単語を取得しています。両方のフラグメントのテキストを変更したい、つまり、前方のフラグメントと後方のフラグメントの意味を入れたいとします。 onClick()で断片に私がflipcard()関数を呼び出しています:

public void flipCard(View view) { 
    if (mShowingBack) { 
     getFragmentManager().popBackStack(); 
     mShowingBack=false; 
    f = (Fragment) getFragmentManager().findFragmentById(R.id.container); 
    if(f!=null) 
     ((TextView) f.getView().findViewById(R.id.text)).setText(w); 
     return; 
    } 

    // Flip to the back. 

    mShowingBack = true; 

    getFragmentManager().beginTransaction().setCustomAnimations(
        R.animator.card_flip_right_in, 
        R.animator.card_flip_right_out, 
        R.animator.card_flip_left_in, 
        R.animator.card_flip_left_out) 

      .replace(R.id.container, new CardBackFragment()) 
      .addToBackStack(null) 
      .commit(); 
} 

これは言葉だけではなく、定義を変更する私の試みです。しかし、私は断片のテキストデータを動的に変更することはできません。両方のフラグメントをデータベースから新しい単語/意味で動的に更新するのを手伝ってください。

答えて

1

私は、最初のステップは、彼らが引数として表示されます単語を取るようにあなたのフラグメントを変更することがあると思う:

public class CardFlip extends Fragment { 

    public static String ARGUMENT_WORD = "ARGUMENT_WORD" 

    public static CardFlip instantiate(String text) { 
     CardFlip cardFlip = new CardFlip(); 
     Bundle argsBundle = new Bundle(); 
     argsBundle.putString(ARGUMENT_WORD, text); 
     cardFlip.setArguments(argsBundle); 
     return cardFlip; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     String text = getArguments().getString(ARGUMENT_WORD); 
     ((TextView) findViewById(R.id.text)).setText(text); 
    } 
} 

は、両方のフラグメントのためにこれを行います。これで、必要な言葉で動的に断片を作ることができます。

new CardFlip()コンストラクタではなく、static instantiateメソッドを使用するように、flipcard()メソッドをリファクタリングするだけで済みます。常にあなたのフラグメントが最新の単語で最新になるようにするため、popBackStack()FragmentManager.beginTransaction().replace()に使用しないでください。このようなもの:

public void flipCard(View view) { 
    Fragment frag; 
    if (mShowingBack) { 
     frag = CardFlip.instantiate(currentWord); 
    } 
    else { 
     frag = CardBack.instantiate(currentWord); 
    } 
    getFragmentManager().beginTransaction() 
      .replace(R.id.fragment_container, frag) 
      .commit(); 
} 

単語をランダムに変更する必要があるのは、すべてのロジックです。

これらはすべて公式developer's guideの概念ですので、これを非常に慎重に検討してください:複数回ガイドを読み、メモを取ることを検討してください。

+0

これを試しましたが、このエラーが発生しました 'java.lang.NullPointerException:仮想メソッドを呼び出そうとしています' void android.os.Bundle.putString(java.lang.String、java.lang.String) 'nullオブジェクト参照' – Igniter

+0

@Igniterミスを修正するために私の答えを更新しました。しかし、チュートリアルもお読みください! –

+1

ありがとう@David Rawson。あなたの答えは私を助けました:)しかし、 'super.onActivityCreated(savedInstanceState);' onActivityCreatedメソッドにも追加する必要があります。 – Igniter

関連する問題