Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use onActivityResult in RecyclerView.Adapter

I want to use onActivityResult in RecyclerView.Adapter. But I don't understand how this release in my situation. I have a dynamic RecyclerView.Adapter

RecyclerView.Adapter:

public class SettingsRecyclerAdapter extends RecyclerView.Adapter {

    private ArrayList<SettingsTypeModel> dataSet;
    Context mContext;
    int total_types;


    TextInputLayout textInputLayoutIncome;
    TextInputLayout textInputLayoutCosts;
    EditText editIncome;
    EditText editCosts;

    public MoneyTypeViewHolder(View itemView) {
        super(itemView);

        textInputLayoutIncome = (TextInputLayout) itemView.findViewById(R.id.textInputLayoutIncome);
        editIncome = (EditText) textInputLayoutIncome.findViewById(R.id.editIncome);

        textInputLayoutCosts = (TextInputLayout) itemView.findViewById(R.id.textInputLayoutCosts);
        editCosts = (EditText) textInputLayoutCosts.findViewById(R.id.editCosts);
        }
    }
    public static class SendToMailTypeViewHolder extends RecyclerView.ViewHolder {

        Switch switchSendMailReport;

        public SendToMailTypeViewHolder(View itemView) {
            super(itemView);
            switchSendMailReport = (Switch) itemView.findViewById(R.id.switchSendMailReport);
        }
    }

    public static class SendToDriveTypeViewHolder extends RecyclerView.ViewHolder {

        Switch switchDriveReport;

        public SendToDriveTypeViewHolder(View itemView) {
            super(itemView);

            switchDriveReport = (Switch) itemView.findViewById(R.id.switchDriveReport);
        }
    }

    public SettingsRecyclerAdapter(ArrayList<SettingsTypeModel> data, Context context) {
        this.dataSet = data;
        this.mContext = context;
        total_types = dataSet.size();
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view;
        switch (viewType) {
            case SettingsTypeModel.TYPE_SEND_TO_MAIL:
                view = LayoutInflater.from(parent.getContext()).inflate(R.layout.type_send_to_mail, parent, false);
                return new SendToMailTypeViewHolder(view);
            case SettingsTypeModel.TYPE_SEND_TO_DRIVE:
                view = LayoutInflater.from(parent.getContext()).inflate(R.layout.type_send_to_drive, parent, false);
                return new SendToDriveTypeViewHolder(view);
        }
        return null;
    }

    @Override
    public int getItemViewType(int position) {
        switch (dataSet.get(position).type) {
            case 4:
                return SettingsTypeModel.TYPE_SEND_TO_MAIL;
            case 5:
                return SettingsTypeModel.TYPE_SEND_TO_DRIVE;
            default:
                return -1;
        }
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int listPosition) {

        SettingsTypeModel object = dataSet.get(listPosition);
        if (object != null) {
            switch (object.type) {
                case SettingsTypeModel.TYPE_SEND_TO_MAIL:

                    ((SendToMailTypeViewHolder) holder).switchSendMailReport.setChecked(false);
                    ((SendToMailTypeViewHolder) holder).switchSendMailReport.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                        @Override
                        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                            if (isChecked) {

                            } else {

                            }
                        }
                    });
                    //       switchSendMailReport.setChecked(getSwitchSendReportMail());

                    break;

                case SettingsTypeModel.TYPE_SEND_TO_DRIVE:

                    ((SendToDriveTypeViewHolder) holder).switchDriveReport.setChecked(false);
                    ((SendToDriveTypeViewHolder) holder).switchDriveReport.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                        @Override
                        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                            if (isChecked) {
                                ((SendToDriveTypeViewHolder) holder).switchDriveReport.setChecked(false);

                            } else {

                            }
                        }
                    });

                    break;
                }
            }
        }

        @Override
        public int getItemCount() {
            return dataSet.size();
        }
     }

Activity:

public class SettingsActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_settings);

        ArrayList<SettingsTypeModel> list= new ArrayList<>();
        list.add(new SettingsTypeModel(SettingsTypeModel.TYPE_SEND_TO_MAIL));
        list.add(new SettingsTypeModel(SettingsTypeModel.TYPE_SEND_TO_DRIVE));

        SettingsRecyclerAdapter adapter = new SettingsRecyclerAdapter(list,this);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, OrientationHelper.VERTICAL, false);

        RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recyclerVieww);
        mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
        mRecyclerView.setLayoutManager(linearLayoutManager);
        mRecyclerView.setItemAnimator(new DefaultItemAnimator());
        mRecyclerView.setClickable(true);
        mRecyclerView.setAdapter(adapter);
    }

    public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }
}

After clicking to switchSendMailReport or switchDriveReport I need to call a function onActivityResult.

How to use onActivityResult in RecyclerView.Adapter?

Thanks a lot!

like image 465
Yury Matatov Avatar asked Jan 31 '26 03:01

Yury Matatov


2 Answers

create an interface in your SettingsRecyclerAdapter :

  public interface OnAdapterResult {
            public void onAdapterResult(boolean isChecked);
        }

and Attach the interface in it's constructor :

 public SettingsRecyclerAdapter (Context context){
            mContext = context;
            // .. Attach the interface
            try{
                onAdapterResult = (OnAdapterResult) context;
            }catch(ClassCastException ex){

                Log.e("MyAdapter","error"+ ex,);
            }
        }

then init your interface method :

((SendToMailTypeViewHolder) holder).switchSendMailReport.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                        @Override
                        public void onCheckedChanged(CompoundButton buttonView, 
                         boolean isChecked) {
                            if (isChecked) {
                            onAdapterResult.onAdapterResult(isChecked); \\ here
                            } else {

                            }
                        }
                    });

then implements Your SettingsActivity from adepter.OnAdapterResult interface :

public class SettingsActivity extends AppCompatActivity implements adepter.OnAdapterResult {
.
.
.


    @Override
        public void onAdapterResult(boolean isChecked) {
            // 
        }

}
like image 176
mohammadReza Abiri Avatar answered Feb 02 '26 17:02

mohammadReza Abiri


You can't use activity's onActivityResult() inside your adapter class. but you can create your own same method in the adapter class

public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
        // do you stuff
     }

Now from activity when you get call back in onActivityResult() call your adapter method

if(adapter !=null){
   adapter.onActivityResult(requestCode,resultCode,data)
}
like image 42
Kishan Maurya Avatar answered Feb 02 '26 16:02

Kishan Maurya