Передача данных из адаптера через диалог в действие - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь передать данные из моего адаптера в действие с диалогом между ними.

Мой текущий поток данных

RecyclerAdapter -> Активность подтверждения -> Активность чата

Что я хочу

RecyclerAdapter -> Пользовательский диалог -> Активность чата

Image describing data flow

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

адаптер

    public void openDialog(){

    FragmentManager manager = ((AppCompatActivity)mContext).getSupportFragmentManager();

    Confirmation_Dialog confirmation_dialog = new Confirmation_Dialog();
    confirmation_dialog.show(manager, "example dialog");



}

Диалог

    @Override
public Dialog onCreateDialog(Bundle savedInstanceState) {


    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    LayoutInflater inflater = getActivity().getLayoutInflater();
    View view = inflater.inflate(R.layout.layout_dialog, null);

    builder.setView(view)

            .setTitle("Are You Sure");


            mYesBtn = view.findViewById(R.id.yes_button_dialog);
            mNoBtn = view.findViewById(R.id.no_button_dialog);

            mYesBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(getContext(), "it worked YES!!", Toast.LENGTH_SHORT).show();
                }
            });

            mNoBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    dismiss();
                }
            });


    return builder.create();

}

}

Ответы [ 5 ]

0 голосов
/ 17 мая 2019

Вместо того, чтобы иметь диалог в отдельном файле, я просто переместил его в класс адаптера

0 голосов
/ 16 мая 2019

Вы можете создать событие щелчка адаптера в классе активности и настроить интерфейс для вашего адаптера, как показано ниже в вашем адаптере:

 onCircularsClick _oncircularClick;

    public interface onCircularsClick {

        public void _onCircularClick(Circular.TableBean bean);
    }

ваш конструктор адаптера

 public CircularListAdapter(Context ctx,  onCircularsClick __oncircularClick) {
        this.ctx = ctx;


        this._oncircularClick = __oncircularClick;

    }

иустановить щелчок, как

viewHolder.lin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                _oncircularClick._onCircularClick(list.get(i));//data that you want to pass when click fires
            }
        });

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

0 голосов
/ 16 мая 2019

Ваш диалог FragmentDialog, вы можете использовать метод setArguments для передачи аргумента.

0 голосов
/ 16 мая 2019

Не используйте общий преф для передачи данных, общий префикс больше похож на сохранение данных в телефоне для дальнейшего использования.В этом случае (как предложил @average_developer) используйте Intent Bundles для передачи данных в целевое действие.

Я думаю, что в вашем случае вы должны использовать (код ниже), чтобы фактически получить некоторую информацию, чтобы определить, какой чат он будет создан в следующем упражнении.

 @Override
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long l) {
    Intent i = new Intent(this, ProductActivity.class);
    i.putExtra("item_id", manager.getItemIdAtIndex(pos));
    startActivity(i);
}
0 голосов
/ 16 мая 2019

Просто используйте пакет для передачи данных в новую активность.

В адаптере

String value="Hello world";
Intent i = new Intent(context, NewActivity.class);    
i.putExtra("key",value);
startActivity(i);

Затем в новом действии извлеките эти значения:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    String value = extras.getString("key");
    //The key argument here must match that used in the other activity
}
...