Дождитесь закрытия диалогового окна, чтобы добавить элемент в просмотр - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть 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();

Ответы [ 3 ]

1 голос
/ 03 ноября 2019

Метод положительной кнопки 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);
    }
});
0 голосов
/ 03 ноября 2019

при создании вы можете инициализировать или настроить ваше представление переработчика, и когда вы хотите добавить новый элемент в это представление переработчика, вы можете сделать это в одно нажатие диалогового окна.

//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!!
    }
0 голосов
/ 03 ноября 2019

Вы должны поместить логику создания нового элемента в метод onClick. В этом случае новый элемент создается сразу после открытия диалога (с предыдущим m_text, я думаю).

...