Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在PagerAdapter幻灯片中跟踪edittext字段?_Android_Android Pageradapter - Fatal编程技术网

Android 如何在PagerAdapter幻灯片中跟踪edittext字段?

Android 如何在PagerAdapter幻灯片中跟踪edittext字段?,android,android-pageradapter,Android,Android Pageradapter,我在Android中使用了一个相当简单的自定义寻呼机适配器,我想跟踪edittext字段的内容,这样每个新幻灯片在输入时都会保留相同的文本。有人对此有什么见解吗?我猜我需要为文本更改设置一个侦听器,但我不确定该放在哪里。这是我的适配器: private class CustomPagerAdapter extends PagerAdapter { public int getCount() { return 3; } public Object ins

我在Android中使用了一个相当简单的自定义寻呼机适配器,我想跟踪edittext字段的内容,这样每个新幻灯片在输入时都会保留相同的文本。有人对此有什么见解吗?我猜我需要为文本更改设置一个侦听器,但我不确定该放在哪里。这是我的适配器:

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;

    }
}

创建TextWatcher,然后将其添加到每个EditText:

TextWatcher tw = new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {                   
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {                    
            }

            @Override
            public void afterTextChanged(Editable s) {
            // Save the text to some global variable
            }
        };

EditText et = (EditText) findViewById(R.id.editText1);
EditText et2 = (EditText) findViewById(R.id.editText2);

et.addTextChangedListener(tw);
et2.addTextChangedListener(tw);
编辑:

TextWatcher[] tw = new TextWatcher[12];
for (int i = 0; i < tw.length; i++) {
tw[i] = new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {}
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
        @Override
        public void afterTextChanged(Editable s) {
        // Save the text to some global variable array
        txt_array[i] = s.toString();
        }
    };
}

for (int i = 0; i < et.length; i++) {7
    et[i].addTextChangedListener(tw[i]);
}
在上面的代码中,没有简单的方法知道哪个EditText调用了事件。 在这种情况下,您需要为每个EditText提供自己的TextWatcher:

et1.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
        }

        @Override
        public void afterTextChanged(Editable s) {
            global_string_variable_for_et1 = s.toString();
        }
    });
Edit2:

TextWatcher[] tw = new TextWatcher[12];
for (int i = 0; i < tw.length; i++) {
tw[i] = new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {}
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
        @Override
        public void afterTextChanged(Editable s) {
        // Save the text to some global variable array
        txt_array[i] = s.toString();
        }
    };
}

for (int i = 0; i < et.length; i++) {7
    et[i].addTextChangedListener(tw[i]);
}
TextWatcher[]tw=新的TextWatcher[12];
对于(int i=0;i
好的,我是这样做的:

在主类中设置成员变量:

mText = "";
在适配器类的InstanceItem()中设置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);
@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);
}
然后在适配器类的setPrimaryItem()方法中:

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);
@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);
}

我可以通过放置一个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);

在实例化项中,我使用字符串notedenteredbyser

这可能不是标准的方法,但是可以为存储输入值的每个edittext设置一个静态字符串。当幻灯片膨胀时,将edittext设置为它对应的静态字符串。是的,这是我想的,但它会变得混乱,因为我有12张或更多的幻灯片。我将尝试提出一个更简洁的版本,但是如果我不能,我会检查你的答案,如果你担心代码太乱,你可以通过在循环中分配它们来创建一个TextWatcher数组。然后,您可以将每个et分配给不同的TextWatcher。我已经编辑了答案。