Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有可编辑listview的android对话框_Android_Listview_Android Editable - Fatal编程技术网

带有可编辑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();