带有可编辑listview的android对话框
我正在尝试创建具有可编辑行的列表视图:带有可编辑listview的android对话框,android,listview,android-editable,Android,Listview,Android Editable,我正在尝试创建具有可编辑行的列表视图: 主要活动 行: 现在所有线路都按预期工作: 但是底部的“OK”按钮消失了(如果屏幕足够小): 有趣的是,它曾经与AndroidStudio 2和更老的SDK(21?)一起使用。 有人能告诉你如何使它正常工作吗?你可以用这段代码创建带有你想要的任何内容的AlertDialog。 将ListView放在layout/your_layout_xml上,从对话框视图以编程方式访问它们,并像往常一样使用 AlertDialog.Builder dialogB
主要活动 行:
现在所有线路都按预期工作:
但是底部的“OK”按钮消失了(如果屏幕足够小):
有趣的是,它曾经与AndroidStudio 2和更老的SDK(21?)一起使用。
有人能告诉你如何使它正常工作吗?你可以用这段代码创建带有你想要的任何内容的AlertDialog。 将ListView放在layout/your_layout_xml上,从对话框视图以编程方式访问它们,并像往常一样使用
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
final View dialogView = inflater.inflate(R.layout.your_layout_xml, null);
dialogBuilder.setView(dialogView);
final ListView listView= dialogView.findViewById(R.id.listView);
dialogBuilder.setTitle(getString(R.string.app_name));
dialogBuilder.setIcon(R.mipmap.ic_launcher);
dialogBuilder.setCancelable(true);
dialogBuilder.setMessage(getString(R.string.app_dialog_title));
dialogBuilder.setPositiveButton(getString(R.string.dialog_ok), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//your code
}
});
dialogBuilder.setNeutralButton(R.string.dialog_cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
}
});
AlertDialog b = dialogBuilder.create();
b.show();
请不要只是在场外链接到您的项目。您需要在问题本身中包含一个。链接已更新,所有生成的文件均已删除。不,我的意思是,演示您的问题所需的最少代码、XML等应以文本形式出现在问题中。请不要将场外链接到必要的材料。显然你没有抓住要点。我确实在对话框中创建了积极按钮,这正是您建议的方式。问题是,由于不可见的EditText(当用户点击一行时,软键盘弹出),这个按钮没有显示在屏幕上,ListView占据了整个不动产。这个问题已经被问过了,但没有得到回答。你可以使用固定大小的ListView,也许它会有所帮助
public class CPHeaderListAdapter extends ArrayAdapter<Object> {
protected final String DEBUG_TAG = this.getClass().getName();
private List<Pair<String, String>> headerList;
private LayoutInflater layoutInflater;
public CPHeaderListAdapter(Context context, @NonNull List<Pair<String, String>> headers) {
super(context, R.layout.list_view, R.id.headerValue);
headerList = headers;
layoutInflater = LayoutInflater.from(context.getApplicationContext());
}
@Override
public int getCount() {
return headerList.size();
}
@Override
public Object getItem(int position) {
return headerList.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
RowViewHolder rowViewHolder;
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.list_view, null);
rowViewHolder = new RowViewHolder();
convertView.setTag(rowViewHolder);
LinearLayout layout = convertView.findViewById(R.id.headerRowLayout);
layout.setVisibility(View.VISIBLE);
rowViewHolder.labelView = convertView.findViewById(R.id.headerLabel);
rowViewHolder.valueView = convertView.findViewById(R.id.headerValue);
rowViewHolder.actionButton = convertView.findViewById(R.id.headerActionButton);
} else {
rowViewHolder = (RowViewHolder) convertView.getTag();
}
parent.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
rowViewHolder.valueView.setTag(position);
rowViewHolder.actionButton.setTag(position);
Pair<String, String> header = headerList.get(position);
rowViewHolder.labelView.setText(header.first);
rowViewHolder.valueView.setText(header.second);
rowViewHolder.valueView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
});
rowViewHolder.actionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = Integer.valueOf(v.getTag().toString());
Log.d(DEBUG_TAG, String.format("onClick actionButton %s, #%d", v.getTag().toString(), position));
}
});
rowViewHolder.valueView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
int position = Integer.valueOf(v.getTag().toString());
Pair<String, String> header = headerList.get(position);
String label = header.first;
String text = ((TextView) v).getText().toString();
Pair<String, String> newHeader = new Pair<>(label, text);
headerList.set(position, newHeader);
}
}
});
return convertView;
}
private class RowViewHolder {
TextView labelView;
TextView valueView;
Button actionButton;
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
>
<LinearLayout
android:id="@+id/headerRowLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginLeft="10sp"
android:layout_marginRight="10sp"
>
<TextView
android:id="@+id/headerLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:textColor="#505050"
/>
<EditText
android:id="@+id/headerValue"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="text"
android:scrollHorizontally="true"
android:textColor="#000000"
/>
<Button android:id="@+id/headerActionButton"
android:text="del"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
/>
</LinearLayout>
AlertDialog dialog = builder.create();
EditText editText = new EditText(AlertDialogList.this.getApplicationContext());
editText.setVisibility(View.GONE);
builder.setView(editText);
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
final View dialogView = inflater.inflate(R.layout.your_layout_xml, null);
dialogBuilder.setView(dialogView);
final ListView listView= dialogView.findViewById(R.id.listView);
dialogBuilder.setTitle(getString(R.string.app_name));
dialogBuilder.setIcon(R.mipmap.ic_launcher);
dialogBuilder.setCancelable(true);
dialogBuilder.setMessage(getString(R.string.app_dialog_title));
dialogBuilder.setPositiveButton(getString(R.string.dialog_ok), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//your code
}
});
dialogBuilder.setNeutralButton(R.string.dialog_cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
}
});
AlertDialog b = dialogBuilder.create();
b.show();