2016-07-11 22 views
0

私は自分のアクティビティで2つのViewPagesを作成しました。私がしようとしているのは、それらの間で同じデータを共有することです。ビューポート間でデータを共有する

ViewPager 1は、 "A"という名前のリスト内のすべての文字列の断片を表示します。 すべてのフラグメントにはTextViewを使用した単純なレイアウトがあります。

ViewPager 2は、同じリスト "A"のすべての文字列のフラグメントを表示します。 すべてのフラグメントには、EditTextを持つ単純なレイアウトがあります。

私はこの振る舞いを取得しようとしている:

1)VP 1が表示され、ユーザーがリストの「A」からの文字列が移入すべてのフラグメントをスワイプすることができます。

2)VP 2は見えません。

3)TextViewでonClickイベントが発生した後、VP 1を非表示にしてVP 2に同じ文字列の内容を表示したいのですが、TextViewではなくEditTextに表示します。

4)ユーザーはEditTextの内容を変更できます。

5)4)の後、ユーザーはツールバーのボタンを押して、内容を更新してVP1に戻ることができます。

私はFragmentStatePagerAdapterを使用しています。

データをDBまたはファイルに直接保存することを考えていました。

このようなものを作成することはできますか? VP2のフラグメント "n"に到達するVP1のフラグメント "n"をタップした後にイベントを実装するにはどうすればよいですか? VP 2のMOD後にVP 1のコンテンツを更新するにはどうすればよいですか?

現時点でのコードは非常にシンプルなので、私はここに投稿していません。ちなみに、this oneと非常に似ています。

おかげで、あなただけのフラグメントがTextViewEditTextを持つ、1 ViewPagerを使用していないのはなぜ

答えて

0

EditTextの可視性は "GONE"に設定されています。 TextViewをクリックすると「GONE」に、「EditText」には「VISIBLE」と表示されます。ツールバーのボタンをクリックすると、その反対の操作を行い、新しいテキストを適切なTextViewに入力します。

+0

おかげで(コード内)あなたのフラグメントでアクセスして、私はあなたのソリューションを試してみましょうそれは非常に単純ですが、おそらく最高です。知らせます。 – michoprogrammer

+0

okay cool ^^問題があればキャッチアップしてください –

0

オブジェクト指向のアプローチはインターフェイスを使用しています。フラグメントで通信するためのアクティビティをインターフェースで作成することができます。

ViewPagerComm。クラス:

public interface ViewPagerComm { 
String getData(); 
void setData(String data); 
} 

活動:アダプターで

public class FragmentStatePagerSupport extends Activity, implements  ViewPagerComm { 

String data; 
... 

@Override 
public void setData(String data){ 
this.data = data; 
} 

@Override 
public String getData(){ 
return data; 
} 

} 

... 
} 

:あなたのかけらで

public static class MyAdapter extends FragmentStatePagerAdapter { 
    ViewPagerComm callback; 
    public MyAdapter(FragmentManager fm, ViewPagerComm callback) { 
     this.callback = callback; 
     super(fm); 
    } 

    @Override 
    public int getCount() { 
     return NUM_ITEMS; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return ArrayListFragment.newInstance(position, callback); 
    } 
} 

:今

public static class ArrayListFragment extends ListFragment { 
    ViewPagerComm callback; 

    static ArrayListFragment newInstance(int num, ViewPagerComm callback) { 
     ArrayListFragment f = new ArrayListFragment(); 
     f.callback = callback; 
     // Supply num input as an argument. 
     Bundle args = new Bundle(); 
     args.putInt("num", num); 
     f.setArguments(args); 

     return f; 
    } 

} 

、フラグメントは、setDataメソッドを呼び出したときに(aStringの)親アクティビティがデータを保持します。フラグメントがgetData()を呼び出すたびに、データがアクティビティから取得されます。

+0

私はEventBusを使っていますが、これはポイントではないと思います。私はVP1またはVP2のフラグメント/アクティビティ間で通信するのに問題はありませんが、問題はVP1のフラグメントNからVP2のフラグメントNに切り替える方法がわかりません。 – michoprogrammer

+0

OK、eventbusは良いです。私はあなたの問題をよく理解していません。 2つのViewPager間で通信したい場合は、イベントをバスに送信し、それをアクティビティに実装して2番目のViewPagerを設定します。 – SoroushA

0

はちょうどあなたの活動に変数を宣言(あなたViewpager活動)

public class TestActivity extends AppCompatActivity { 
    public String test; 
} 

そしてお返事Drilonため

((TestActivity)getActivity()).test 
+0

ご返信ありがとうございましたSimon、しかし私はあなたの解決策を理解していません。 詳しい説明を教えてください。 – michoprogrammer

+0

あなたはあなたのアクティビティを持っていますが、ここではTestActivityです。ブラケットを開いた後、クラススコープで変数を宣言できます。この変数は、他のクラスからpublicに設定することでアクセスできます。 あなたのフラグメントでは、((TestActivity)getActivity())を使ってこの変数にアクセスすることができます。可変性 テキストを編集して文字列を通常どおりに設定します((TestActivity)getActivity())。 " 次に、テキストを表示するフラグメントに移動し、これにアクセスします。((TestActivity)getActivity())。test – Simon

関連する問題