繁体   English   中英

Android:从EditText更新ListView

[英]Android: Update ListView from EditText

朋友们。

我有一个实现状态模式的应用程序模块。 想法是:1.用户输入日期-> 2.屏幕更改为ne状态:动态膨胀ListView并要求用户用一些数据填充列表

问题是,当我第二次从更新方法调用notifyDataSetChange()时,EditText视图不再想要执行其功能。

这是来自logcat的字符串,我认为其中包含我的问题的关键。

09-10 10:33:38.937 26954-26954 / com.example.android.turtleinfo D / ListView:更改可访问性焦点位置= 0

这是所有代码。

1.我的状态模式超级类

public abstract class ScreenState
    {

        public BuilderActivity activity;



        public ScreenState(BuilderActivity activity) {
            this.activity = activity;
            //initializeScreen(activity);
        }

        public abstract void initializeScreen(Activity activity);
        public abstract void switchState();
        public abstract void updateText(View view);


        public void addTextWatcher(EditText text) {
            text.setOnEditorActionListener(new TextView.OnEditorActionListener() {
                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    if (actionId == EditorInfo.IME_ACTION_DONE) {

                        activity.state.updateText(v);

                        return true;
                    }
                    return false;
                }
            });
        }


    }

2.初始化屏幕和updateData方法的实现

@Override
    public void initializeScreen(Activity activity) {

        ((BuilderActivity) activity).editText.setHint("Name");
        addTextWatcher(((BuilderActivity) activity).editText);
        textView = (TextView)activity.getLayoutInflater().inflate(R.layout.schedule_text_style, null);
        textView.setHeight(100);
        screenText = "End Date: " + new SimpleDateFormat("MMMM dd, yyyy", Locale.ENGLISH).format(((BuilderActivity) activity).data.getEndDate())+"\n\n";

        textView.setText(screenText+"\n");
        ((BuilderActivity) activity).scheduleLayout.addView(textView);

        ((BuilderActivity) activity).data.setNames(new ArrayList<String>());

        lv = (ListView)activity.getLayoutInflater().inflate(R.layout.listview_text_style, null);
        listItems = new ArrayList<>();

        adapt = new ArrayAdapter<>(super.activity, R.layout.schedule_text_style, listItems);
        lv.setAdapter(adapt);
        ((BuilderActivity) activity).scheduleLayout.addView(lv);


    }

@Override
public void updateText(View view) {

    String text = activity.editText.getText().toString();

    if (text.length() >= 2) {
        if (!activity.data.names.contains(text)) {
            activity.data.addToList(text);



            listItems.add(text);
            adapt.notifyDataSetChanged();

            activity.editText.setText("");
            counter++;
            activity.editText.setText("");

        } else {
            Toast.makeText(activity, "same names are not allowed",
                Toast.LENGTH_LONG).show();
            ((BuilderActivity) activity).editText.setText("");
        }
    }
    else
    {
        Toast.makeText(activity, "name should contain 2 or more symbols",
                Toast.LENGTH_LONG).show();
        ((BuilderActivity) activity).editText.setText("");
    }

}

这就是它在设备上的外观。

1.第一次插入就可以了

在此处输入图片说明

2.第二和进一步插入是不可能的。 OK软键盘按钮首先切换到NEXT按钮 在此处输入图片说明

3.如果单击下一步,则EditText失去焦点,什么也没有发生,但是NEXT按钮切换到“ / n”按钮。

在此处输入图片说明

所以,如果有人知道,请帮我忙,帮忙!

提前致谢!

你的问题在

public void addTextWatcher(EditText text)

功能。

查看android:imeActionIdandroid:imeOptions属性 ,以及setOnEditorActionListener()方法 ,全部位于TextView / Edittext上。

您也可以使用此按钮更改键盘按钮的文本。

mEditText.setImeActionLabel("Your text", KeyEvent.KEYCODE_ENTER);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM