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.我的状态模式超级Class
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。初始化屏幕和更新数据方法的实现
@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:imeActionId 和 android:imeOptions 属性,加上 setOnEditorActionListener() 方法,全部在TextView/Edittext.
您还可以使用此更改键盘按钮的文本。
mEditText.setImeActionLabel("Your text", KeyEvent.KEYCODE_ENTER);
朋友们。
我有一个实现状态模式的应用程序模块。想法是: 1. 用户输入日期 --> 2. 屏幕变为 ne 状态:动态膨胀 ListView 并要求用户用一些数据填充列表
问题是当我第二次从更新方法调用 notifyDataSetChange() 时,EditText 视图不想再执行它的功能了。
这是来自 logcat 的字符串,我认为它包含我的问题的关键。
09-10 10:33:38.937 26954-26954/com.example.android.turtleinfo D/ListView:更改辅助功能焦点位置= 0
这里有所有代码。
1.我的状态模式超级Class
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。初始化屏幕和更新数据方法的实现
@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:imeActionId 和 android:imeOptions 属性,加上 setOnEditorActionListener() 方法,全部在TextView/Edittext.
您还可以使用此更改键盘按钮的文本。
mEditText.setImeActionLabel("Your text", KeyEvent.KEYCODE_ENTER);