is it possible to have method startActivtyForResult
within an adapter?Then how to get the response? Where to execute the call back function?
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);
Tags: androidandroid