Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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
Java 等待对话框关闭,将项目添加到recyclerview_Java_Android_Android Recyclerview_Android Alertdialog - Fatal编程技术网

Java 等待对话框关闭,将项目添加到recyclerview

Java 等待对话框关闭,将项目添加到recyclerview,java,android,android-recyclerview,android-alertdialog,Java,Android,Android Recyclerview,Android Alertdialog,我有一个RecyclerView,它应该会得到一个新项目,该项目的名称在AlertDialog中设置。 问题是,在以下代码中对话框仍处于打开状态时,正在创建该项。 在这种情况下,我如何等待输入?如果我必须挂接onDismiss()我没有设置正确项目名称所需的RecyclerView信息 HouseConfig config = new HouseConfig(this); AlertDialog.Builder builder = new AlertDialog.Builder(

我有一个
RecyclerView
,它应该会得到一个新项目,该项目的名称在
AlertDialog
中设置。 问题是,在以下代码中对话框仍处于打开状态时,正在创建该项。 在这种情况下,我如何等待输入?如果我必须挂接
onDismiss()
我没有设置正确项目名称所需的
RecyclerView
信息

    HouseConfig config = new HouseConfig(this);
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Enter new Category name");
    final EditText input = new EditText(this);
    input.setInputType(InputType.TYPE_CLASS_TEXT);
    builder.setView(input);
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            m_text = input.getText().toString();
            dialog.dismiss();
        }
    });
    builder.create().show();
    Log.v(TAG,"m_text: " + m_text);
    config.addNewCategoryWithViewOrder(new Category(m_text, R.drawable.ic_books, -1));
    RecyclerView rv = (RecyclerView) v.getParent().getParent().getParent();
    rv.setAdapter(new CategoryRecycleListAdapter(config.getViewOrderSortedCategories(), this));
    rv.scrollToPosition(config.getCategorySize() - 1);
    rv.getAdapter().notifyItemRangeInserted(config.getCategorySize() - 2, 1);
    rv.getAdapter().notifyDataSetChanged();

您应该将创建新项的逻辑放在onClick方法中。在这种情况下,新项是在对话框打开后立即创建的(我猜是以前的m_文本)。

您应该将创建新项的逻辑放在onClick方法中。在这种情况下,新项目是在对话框打开后立即创建的(我猜是以前的m_文本)。

当您按下“确定”按钮时,将调用肯定按钮的
onClick()
方法。因此,您应该在此方法中添加新数据并通知适配器

builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        m_text = input.getText().toString();
        config.addNewCategoryWithViewOrder(new Category(m_text, R.drawable.ic_books, -1));
        rv.getAdapter().notifyItemRangeInserted(config.getCategorySize() - 2, 1);  // I would rather used notifyItemInserted()
        rv.scrollToPosition(config.getCategorySize() - 1);
    }
});
按下“确定”按钮时,将调用肯定按钮的
onClick()
方法。因此,您应该在此方法中添加新数据并通知适配器

builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        m_text = input.getText().toString();
        config.addNewCategoryWithViewOrder(new Category(m_text, R.drawable.ic_books, -1));
        rv.getAdapter().notifyItemRangeInserted(config.getCategorySize() - 2, 1);  // I would rather used notifyItemInserted()
        rv.scrollToPosition(config.getCategorySize() - 1);
    }
});

在“创建时”中,您可以初始化或设置“回收器”视图,当您想在该“回收器”视图中添加新项目时,您可以在对话框的一次单击中执行此操作

//function which setup RV.
initializeRV() //call this function in onCreate function.
showPopup() // call this function after initializeRV function.

public void showPopup(){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Enter new Category name");
    final EditText input = new EditText(this);
    input.setInputType(InputType.TYPE_CLASS_TEXT);
    builder.setView(input);
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            updateView(input.getText().toString());
            dialog.dismiss();
}
});
}
builder.create().show();
public void updateView(String data){
//initialize your that particular (HoseConfig)item here, add it to list and notify RV adpter.
//after creating config object
config.addNewCategoryWithViewOrder(new Category(m_text, R.drawable.ic_books, -1));
        rv.getAdapter().notifyItemRangeInserted(config.getCategorySize() - 2, 1);  // I would rather used notifyItemInserted()
        rv.scrollToPosition(config.getCategorySize() - 1);
}
public void initializeRV(){
//setup your Recycler View adapter and manager here!!
    }

在“创建时”中,您可以初始化或设置“回收器”视图,当您想在该“回收器”视图中添加新项目时,您可以在对话框的一次单击中执行此操作

//function which setup RV.
initializeRV() //call this function in onCreate function.
showPopup() // call this function after initializeRV function.

public void showPopup(){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Enter new Category name");
    final EditText input = new EditText(this);
    input.setInputType(InputType.TYPE_CLASS_TEXT);
    builder.setView(input);
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            updateView(input.getText().toString());
            dialog.dismiss();
}
});
}
builder.create().show();
public void updateView(String data){
//initialize your that particular (HoseConfig)item here, add it to list and notify RV adpter.
//after creating config object
config.addNewCategoryWithViewOrder(new Category(m_text, R.drawable.ic_books, -1));
        rv.getAdapter().notifyItemRangeInserted(config.getCategorySize() - 2, 1);  // I would rather used notifyItemInserted()
        rv.scrollToPosition(config.getCategorySize() - 1);
}
public void initializeRV(){
//setup your Recycler View adapter and manager here!!
    }