0

私は Android でかなり単純なカスタム ページャー アダプターを使用しています。編集テキスト フィールドの内容を追跡して、新しい各スライドが入力された場合に同じテキストを保持するようにしたいと考えています。誰でもこれについて何か洞察がありますか?テキスト変更用のリスナーを設定する必要があると思いますが、どこに配置すればよいかわかりません。これが私のアダプターです:

private class CustomPagerAdapter extends PagerAdapter {

    public int getCount() {
        return 3;
    }

    public Object instantiateItem(ViewGroup collection, int position) {

        LayoutInflater inflater = (LayoutInflater) collection.getContext()
                .getSystemService(LAYOUT_INFLATER_SERVICE);
        View view;

        switch(position) {
            case 0:
                view = inflater.inflate(R.layout.slide0, null, false);
                break;
            case 1:
                view = inflater.inflate(R.layout.slide1, null, false);
                break;
            case 2:
                view = inflater.inflate(R.layout.slide2, null, false);
                break;
            default:
                view = inflater.inflate(R.layout.slide0, null, false);
        }
        collection.addView(view,0);

        return view;
    }



    @Override
    public void destroyItem(ViewGroup arg0, int arg1, Object arg2) {
        arg0.removeView((View) arg2);
    }
    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == arg1;
    }
    @Override
    public Parcelable saveState() {
        return null;
    }

    @Override
    public void setPrimaryItem(ViewGroup container, int position, Object object) {
        super.setPrimaryItem(container, position, object);
        mCurrentSlide = (View) object;

    }
}
4

3 に答える 3

1

わかりました、これが私がやった方法です:

メイン クラスにメンバー変数を設定します。

mText = "";

アダプタ クラスの instantiateItem() で textWatcher を設定します。

EditText edtSlide = (EditText)view.findViewById(R.id.edtSlide);
//Set a listener for the editText that updates the member variable on keystroke.
    TextWatcher tw = new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            mText = s.toString();
        }

        };

    edtSlide.addTextChangedListener(tw);

次に、アダプタ クラスの setPrimaryItem() メソッドで次のようにします。

@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
    super.setPrimaryItem(container, position, object);
    EditText text = (EditText)((View) object).findViewById(R.id.edtSlide);
    text.setText(mText);
}
于 2013-08-21T19:23:59.967 に答える
0

以下のように TextWatcher を配置することで取得できました。

notes = (EditText) itemView.findViewById(R.id.notesText);

    TextWatcher textWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            notedEnteredByUser = charSequence.toString();
            Log.i("TEXTWATCHER", notedEnteredByUser);
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    };
    notes.addTextChangedListener(textWatcher);

そして、instantiateItem 内では、String notedEnteredByUser を使用しています。

于 2016-08-04T03:50:08.223 に答える