Запустить метод в ArrayAdapter после нажатия кнопки подтверждения во фрагменте диалога (по интерфейсу) - PullRequest
0 голосов
/ 13 июля 2020

Я хотел бы запустить метод «ConfirmChallenge» в «MainfeedListAdapter» после нажатия кнопки подтверждения во фрагменте диалогового окна «ConfirmChallengeDialog».

Исключение NullPointerException появилось при вызове «ConfirmChallengeListener.onConfirmChallenge ()» в OnClickListener () кнопки подтверждения. Что я здесь делаю не так? Надеюсь, мой вопрос ясен.

Ниже фрагмент диалога

public class ConfirmChallengeDialog extends DialogFragment {

    public interface OnConfirmChallengeListener{
        void onConfirmChallenge();
    }
    OnConfirmChallengeListener mOnConfirmChallengeListener;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.dialog_confirm_challenge, container, false);

        TextView confirmDialog = (TextView) view.findViewById(R.id.dialogConfirm);
        confirmDialog.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "onClick: captured challenge and confirming with holder: ");

                mOnConfirmChallengeListener.onConfirmChallenge();
                getDialog().dismiss();
            }
        });

        TextView cancelDialog = (TextView) view.findViewById(R.id.dialogCancel);
        cancelDialog.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "onClick: closing the dialog");
                getDialog().dismiss();
            }
        });

        return view;
    }

    @Override
    public void onAttach(@NonNull Context context) {
        Log.d(TAG, "onAttach: Completed.");
        super.onAttach(context);

        try{
            mOnConfirmChallengeListener = (OnConfirmChallengeListener) getTargetFragment();
        }catch(ClassCastException e){
            Log.e(TAG, "onAttach: ClassCastException: " + e.getMessage() );
        }
    }
}

Проблема, с которой я столкнулся, находится в этой строке.

mOnConfirmChallengeListener.onConfirmChallenge();

Ниже ArrayAdapter


public class MainfeedListAdapter extends ArrayAdapter<Photo> implements
ConfirmChallengeDialog.OnConfirmChallengeListener{


    @Override
    public void onConfirmChallenge() {
        Log.d(TAG, "onConfirmChallenge: started.");
        //do sth
    }

    public MainfeedListAdapter(@NonNull Context context, int resource, @NonNull List<Photo> objects) {
        super(context, resource, objects);
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mLayoutResource = resource;
        this.mContext = context;
        mReference = FirebaseDatabase.getInstance().getReference();
    }

@NonNull
    @Override
    public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {

        if (convertView == null){
            convertView = mInflater.inflate(mLayoutResource, parent, false);
            holder = new ViewHolder();

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        //........

        return convertView;
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...