Home » Android » android – can we call startActivityForResult from adapter?How to get the response?

android – can we call startActivityForResult from adapter?How to get the response?

Posted by: admin April 23, 2020 Leave a comment

Questions:

is it possible to have method startActivtyForResult within an adapter?Then how to get the response? Where to execute the call back function?

How to&Answers:

Yes, it’s possible. You need a reference for the Context in the adapter and call the activity:

Intent intent = new Intent(context, TargetActivity.class);
((Activity) context).startActivityForResult(intent, REQUEST_FOR_ACTIVITY_CODE);

Beware that context must be an activity context or this code will fail.

You get the result in the enclosing activity using onActivityResult as usual.

So, for example:

In your adapter:

MyAdapter(Context context) {
    mContext = context;
}

public View getView(int position, View convertView, ViewGroup parent) {
    …
    open.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            …
            Activity origin = (Activity)mContext;
            origin.startActivityForResult(new Intent(mContext, SecondActivity.class), requestCode);
        }   
    });
    …
}

public  void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d("MyAdapter", "onActivityResult");
}

In your second activity, do as usual with setResult and finish.

In your main activity, capture the result and pass to the adapter callback:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    mAdapter.onActivityResult(requestCode, resultCode, data);
}

Answer:

Yes.You can call startactivityforresult() from adapter.

There are two case-
1.Calling adapter from activity and need onActivityResult in activity.
2.Calling adapter from Fragment and need onActivityResult in fragment.

Case 1:Get OnActivityResult in Activity then pass the reference of activity to adapter constructor

public MyAdapter(Activity pActivity, List<MyBean> pList) {
        mList = pList;
        mActivity = pActivity;       
    }

Now startActivityForResult

Intent intent = new Intent(context, TargetActivity.class);
mActivity.startActivityForResult(intent, REQUEST_FOR_ACTIVITY_CODE);

Case 2: Get OnActivityResult in Fragment then pass the reference of fragment to adapter constructor

 public MyGamesAdapter(Fragment pContext, List<MyBean> pList,) {
        mList = pList;
        mMyFragment =pContext;
    }

 Intent intent = new Intent(context, TargetActivity.class);
    mMyFragment.startActivityForResult(intent, REQUEST_FOR_ACTIVITY_CODE);

Now in activity or fragment override OnActivityResult and get result.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    mAdapter.onActivityResult(requestCode, resultCode, data);
}

Answer:

write a functon in activity class like this

public void startCommentActivity(Intent i){
    startActivityForResult(i, 100);
}

call it in adapter class

mActivity.startCommentActivity(intent);