上下文:有一个自定义Listview,每个列表项都有一个按钮。单击该按钮时,会出现一个带有编辑文本和提交按钮的alertDialog。这仅在第一次点击时发生,在随后的点击中,Toast将仅显示到目前为止点击的次数。
当您单击提交按钮时,将出现一个toast,显示输入editText的文本以及他们点击它的次数,这可能总是为1,因为这只能在第一次点击时发生。
问题:如果用户在点击提交之前点击editText,则timesClicked计数器无法正常工作。我猜它正在休息到0。但是,如果用户不单击editText,则程序正常工作。 0_o我不知所措。
尝试解决:我将代码简化了一点,试图找出问题,这就是我被困住的地方。最初我正在膨胀一个只有编辑文本的视图然后我只是使用builder.setPositiveButtton。我认为直接在视图中实现按钮会修复它但看起来并非如此。我被困在这一段时间了。任何帮助都会很棒
Here is a video of the bug happening
private class OnSubtractClickListener implements View.OnClickListener {
final int id; //id of list item that was clicked
int timesClicked;
Toast toast;
public OnSubtractClickListener(int id, View view) {
super();
this.id = id;
timesClicked = 0;
}
@Override
public void onClick(View view) {
if (timesClicked != 0) {
toast.setText(Integer.toString(timesClicked));
toast.show();
}
else{
toast = Toast.makeText(view.getContext(), "", Toast.LENGTH_SHORT);
final View dialogView = LayoutInflater.from(view.getContext()).inflate(R.layout.dialog_add_notes, null);
AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setView(dialogView);
builder.setTitle("Subtract cigar?");
builder.setIcon(R.mipmap.monkey_launcher);
final AlertDialog dialog = builder.create();
Button yesButton = (Button)dialogView.findViewById(R.id.dialog_notes_yes_button);
yesButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText editText = (EditText)dialogView.findViewById(R.id.dialog_editText);
String userInput = editText.getText().toString();
String timesClickedString = Integer.toString(++timesClicked);
toast.setText(timesClickedString + ": " + userInput);
toast.show();
dialog.dismiss();
}
});
dialog.show(); //new
}
}
}
答案 0 :(得分:0)
答案 1 :(得分:0)
我找到了解决方案。基本上发生的事情是,当键盘出现时,它会导致listview调整大小,在对话框出现之前使用回收/旧版本的列表项重新创建整个列表视图 - 有效地撤消对话框对ListView项所做的任何更改
在listview XML中添加:
机器人:descendantFocusability =" beforeDescendants"
在Mainfest.xml中:
<activity android:name= ".yourActivity"
android:windowSoftInputMode="adjustPan"/>