MultiAutoCompleteTextView 未在 AlertDialog 中显示下拉列表
MultiAutoCompleteTextView not showing dropdown in AlertDialog
我正在使用 MultiAutoCompleteTextView
在输入内容时显示建议。我把 MultiAutoCompleteTextView
放在 AlertDialog
中。现在它没有显示下拉菜单。
My xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity=""
android:orientation="vertical"
android:padding="20dp">
<TextView
android:id="@+id/tv_query_statement"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:textColor="@color/colorTextWhite"/>
<MultiAutoCompleteTextView
android:id="@+id/et_query"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:focusableInTouchMode="true"
android:padding="10dp"
android:textColor="@color/colorTextWhite"/>
<android.support.v7.widget.AppCompatButton
android:id="@+id/btn_submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:padding="10dp"
android:text="Submit"
android:textColor="@color/colorTextWhite"/>
</LinearLayout>
Inside activity
private void setupQueryDialog() {
final AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());
View view = LayoutInflater.from(getContext()).inflate(R.layout.layout_query_dialog, null);
AppCompatButton btnsubmit = (AppCompatButton) view.findViewById(R.id.btn_submit);
final MultiAutoCompleteTextView mQueryEditor = (MultiAutoCompleteTextView) view.findViewById(R.id.et_query);
TextView mQueryStatement = (TextView) view.findViewById(R.id.tv_query_statement);
String[] commands = QueryHelper.getAllSqlCommands(mTableDetailSource);
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, commands);
mQueryEditor.setThreshold(1);
mQueryEditor.setAdapter(adapter);
mQueryEditor.showDropDown();
mQueryEditor.addTextChangedListener(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) {
}
@Override
public void afterTextChanged(Editable editable) {
/*if (editable.toString().length() > 0)
mQueryEditor.showDropDown();*/
}
});
dialog.setView(view);
final Dialog d = dialog.create();
btnsubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
submitQuery(mQueryEditor.getText().toString());
d.dismiss();
}
});
dialog.show();
}
您可以更改您的实施方式
考虑一下,当您想要显示 drop-down 时。通过详细调查,我发现您的代码中存在一些问题。
尽管问题标题是这么说的,但我假设 drop-down 实际上是可见的(如果你没有得到像 WindowManager$BadTokenException
这样的任何异常) .
但问题是对话框出现在 drop-down 上,即 drop-down 隐藏在对话框下方,它在您的 activity.
上
来看看吧
你只需在下面评论一行代码mQueryEditor.setAdapter(adapter);
String[] words = new String[]{
"ADD", "DELETE", "UPDATE", "DELETE FROM", "SELECT"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this, android.R.layout.simple_spinner_item, words);
mQueryEditor.setThreshold(1);
mQueryEditor.setAdapter(adapter);
mQueryEditor.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
//mQueryEditor.showDropDown(); // Need to comment this line
并添加触摸 listener
,当用户触摸它时,它会帮助您显示 drop-down。
mQueryEditor.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
mQueryEditor.showDropDown();
mQueryEditor.requestFocus();
return false;
}
});
注意: 通过从 activity
调用此对话框,onCreate()
可能会产生 WindowManager$BadTokenException
和然后应用程序将崩溃。在所有关键 activity 过程完成后,再尝试相同的方法。
我正在使用 MultiAutoCompleteTextView
在输入内容时显示建议。我把 MultiAutoCompleteTextView
放在 AlertDialog
中。现在它没有显示下拉菜单。
My xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity=""
android:orientation="vertical"
android:padding="20dp">
<TextView
android:id="@+id/tv_query_statement"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:textColor="@color/colorTextWhite"/>
<MultiAutoCompleteTextView
android:id="@+id/et_query"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:focusableInTouchMode="true"
android:padding="10dp"
android:textColor="@color/colorTextWhite"/>
<android.support.v7.widget.AppCompatButton
android:id="@+id/btn_submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:padding="10dp"
android:text="Submit"
android:textColor="@color/colorTextWhite"/>
</LinearLayout>
Inside activity
private void setupQueryDialog() {
final AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());
View view = LayoutInflater.from(getContext()).inflate(R.layout.layout_query_dialog, null);
AppCompatButton btnsubmit = (AppCompatButton) view.findViewById(R.id.btn_submit);
final MultiAutoCompleteTextView mQueryEditor = (MultiAutoCompleteTextView) view.findViewById(R.id.et_query);
TextView mQueryStatement = (TextView) view.findViewById(R.id.tv_query_statement);
String[] commands = QueryHelper.getAllSqlCommands(mTableDetailSource);
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, commands);
mQueryEditor.setThreshold(1);
mQueryEditor.setAdapter(adapter);
mQueryEditor.showDropDown();
mQueryEditor.addTextChangedListener(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) {
}
@Override
public void afterTextChanged(Editable editable) {
/*if (editable.toString().length() > 0)
mQueryEditor.showDropDown();*/
}
});
dialog.setView(view);
final Dialog d = dialog.create();
btnsubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
submitQuery(mQueryEditor.getText().toString());
d.dismiss();
}
});
dialog.show();
}
您可以更改您的实施方式
考虑一下,当您想要显示 drop-down 时。通过详细调查,我发现您的代码中存在一些问题。
尽管问题标题是这么说的,但我假设 drop-down 实际上是可见的(如果你没有得到像 WindowManager$BadTokenException
这样的任何异常) .
但问题是对话框出现在 drop-down 上,即 drop-down 隐藏在对话框下方,它在您的 activity.
上来看看吧
你只需在下面评论一行代码mQueryEditor.setAdapter(adapter);
String[] words = new String[]{
"ADD", "DELETE", "UPDATE", "DELETE FROM", "SELECT"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this, android.R.layout.simple_spinner_item, words);
mQueryEditor.setThreshold(1);
mQueryEditor.setAdapter(adapter);
mQueryEditor.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
//mQueryEditor.showDropDown(); // Need to comment this line
并添加触摸 listener
,当用户触摸它时,它会帮助您显示 drop-down。
mQueryEditor.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
mQueryEditor.showDropDown();
mQueryEditor.requestFocus();
return false;
}
});
注意: 通过从 activity
调用此对话框,onCreate()
可能会产生 WindowManager$BadTokenException
和然后应用程序将崩溃。在所有关键 activity 过程完成后,再尝试相同的方法。