0

これについて話しているスレッドはたくさんありますが、私はすべてを試しましたが、うまくいかないようです。私の問題はちょっと単純です.5つのフラグメントページを持つビューページャーがあります.

このフラグメントのそれぞれに同じレイアウトの編集テキストが 1 つしかありません。問題は、次または前のページにスワイプして edittext に何かを書き込んだ場合、その edittext をリセットしたいということです。

例: PAGE1: edittext=2929 ---(スワイプ)--- PAGE2: edittext = 0 ----(スワイプ)--- PAGE1:edittext = 0

ただし、常に 2929 が表示されます。

私は自分のアプリでこれを行うために、テストプログラムでこれを試みています。

これは私のアダプターです

public class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {

int PAGE_COUNT;
int total;
Fragment frag;
FragmentManager fmm;

/** Constructor of the class */
public MyFragmentPagerAdapter(FragmentManager fm, int x, int total) {
    super(fm);
    fmm = fm;
    total = 0;
    PAGE_COUNT = x;
}

/** This method will be invoked when a page is requested to create */
@Override
public Fragment getItem(int arg0) {
    final FragmentTab11 myFragment = new FragmentTab11();
    Bundle data = new Bundle();
    data.putInt("current_page", arg0 + 1);
    myFragment.setArguments(data);

    return myFragment;

}

/** Returns the number of pages */
@Override
public int getCount() {
    return PAGE_COUNT;
}

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}

この私の断片

public class FragmentTab11 extends SherlockFragment {
int mCurrentPage;
TextView tv;
EditText edt;
Button btn;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    /** Getting the arguments to the Bundle object */
    Bundle data = getArguments();
    /** Getting integer data of the key current_page from the bundle */
    mCurrentPage = (data != null) ? data.getInt("current_page", 0) : 1;

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_one1, container, false);
    tv = (TextView) v.findViewById(R.id.textView1);
    tv.setText("You are viewing the page #" + mCurrentPage
            + " of Frag1\n\n" + "Swipe Horizontally left / right");
    btn = (Button) v.findViewById(R.id.button1);
    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            update();
        }
    });

    edt = (EditText) v.findViewById(R.id.editText1);

    return v;
}

public void update() {
    Log.w("text", mCurrentPage+": " + edt.getText().toString());
    edt.setText("");
}

@Override
public void onDetach() {

    edt.post(new Runnable() {
        @Override
        public void run() {
            edt.setText("");
            Log.w("DETACH", "CurrentPage " + mCurrentPage);
        }
    });
    super.onDetach();

}

そして、ボタンリスナーと同じことをしたいのですが、編集テキストをリセットしますが、クリックする代わりに、スワイプジェスチャになります。

ありがとう、ゴンサロ・モウラ

編集:fragment_one1 の xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="1" />
<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:ems="10" >
</EditText>
<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button" /></LinearLayout>

ページャーを表示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" /></LinearLayout>

FragmentMangerからフラグメントを削除しようとしましたが、

    @Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}

また、tv.setOffscreenPageLimit(limit);、FragmentStatePagerAdapter と FragmentPagerAdapter を試しました。イベント onDetach()、onDestroy() などを使用してフラグメントを破棄するため、状態があります。フラグメントのコードを見れば、私のメソッド onDetach を見ることができます。 ()、notifydatasetchanged、新しいアダプターの設定。

4

1 に答える 1

0

よくわかりました。

viewpager が 3 つのページを作成し、このページが NOT VISIBLE および VISIBLE に設定されることは "すべて" わかっています。私はぐるぐる回って、これを見つけました:

    @Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        Log.w("Visible1", "CurrentPage " + mCurrentPage);

    } else {
        Log.w("NOTVISIBLE1", "CurrentPage " + mCurrentPage);
        if (edt != null) {
            edt.setText("");
        }
    }
}

スワイプしてスワイプすると値がリセットされます。「if」は、ビューがまだ作成されていない可能性があるためです。このメソッドは onCreate() メソッドの前に呼び出されます。しかし、うまくいきます。皆さんが同意するか、これに対するより良い解決策があるかはわかりません。それが誰かを助けることを願っています。

乾杯

于 2013-12-18T14:17:39.903 に答える