Java 从适配器中的startActivityForResult返回时获得onActivityResult
我试图在用户单击活动返回时返回一些数据 我正在从适配器调用startActivityForResult,但当我从活动中实际按下返回键时,似乎从未调用onActivityResult 例如,代码被删减 片段1Java 从适配器中的startActivityForResult返回时获得onActivityResult,java,android,Java,Android,我试图在用户单击活动返回时返回一些数据 我正在从适配器调用startActivityForResult,但当我从活动中实际按下返回键时,似乎从未调用onActivityResult 例如,代码被删减 片段1 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreate(savedInstanceStat
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View mainView = inflater.inflate(R.layout.grid_view, container, false);
return mainView;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mAdapter = new Adapter(this.getActivity(), new ArrayList<Item>());
mGridView = (StaggeredGridView) getView().findViewById(R.id.grid_view);
mGridView.setAdapter(mAdapter);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.w(TAG, "in activity result");
if (requestCode == 1 && resultCode == Activity.RESULT_OK) {
}
由于您使用
activity
上下文来启动活动,因此将在活动中而不是片段中获得onActivityResult
回调。要在片段中获取回调,您需要在片段本身中使用片段上下文/启动活动。我建议使用接口方法来解决这个问题。创建一个接口并在片段中实现它,当单击recommendationLayout
时,从适配器调用接口方法,以便您可以处理片段本身中的单击事件
大概
创建一个接口文件-
public interface RecommendationClickListener {
public void onRecommendationClicked();
}
片段:
public class MyFragment extends Fragment implements RecommendationClickListener{
...
...
...
@Override
public void onRecommendationClicked() {
Intent intent = new Intent(getActivity(), NextActivity.class);
Bundle extras = new Bundle();
extras.putBoolean("denyEditPermission", true);
intent.putExtras(extras);
startActivityForResult(intent, 1);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mAdapter = new Adapter(this.getActivity(), new ArrayList<Item>());
mAdapter.setRecommendationClickListener(this);
mGridView = (StaggeredGridView) getView().findViewById(R.id.grid_view);
mGridView.setAdapter(mAdapter);
}
private RecommendationClickListener mRecommendationClickListener;
public void setRecommendationClickListener(RecommendationClickListener recommendationClickListener) {
this.mRecommendationClickListener = recommendationClickListener;
}
View recommendationLayout = view.findViewById(R.id.recommendation_layout);
recommendationLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mRecommendationClickListener != null) {
mRecommendationClickListener.onRecommendationClicked();
}
}
});
广播解决方案如下: 在片段中 在类的顶部声明
public final static String START_ACT = "com.yourcompanyname.appname.START_ACT";
private Radio radio;
在createView上启动并注册接收器
//Initiate our receiver
radio = new Radio();
//Activate our recevier
getActivity().getApplicationContext().registerReceiver(radio, new IntentFilter(START_ACT));
同样在片段中,创建receiver类和调用活动的方法
/**
* Receiver Class
* This setup checks for the incoming intent action to be able to
* attach more messages to one receiver.
*/
private class Radio extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(START_ACT)){
getDataFromActivity();
}
}
}
public void getDataFromActivity(){
Intent intent = new Intent(getActivity(), Activity.class);
Bundle extras = new Bundle();
extras.putBoolean("denyEditPermission", true);
intent.putExtras(extras);
startActivityForResult(intent, 1);
}
之后,从应用程序中的任何位置向我们的收音机发送消息
context.sendBroadcast(new Intent(Fragment1.START_ACT));
请尝试删除finish()并执行super.onBackPressed();相反,谢谢你的主意。刚刚尝试过,但仍然不起作用。super.on backpressed您仍然必须执行此操作,而不是完成…现在您可以尝试删除onActivity结果中的requestCode==1&&吗?是的,我尝试了之前/之后和而不是。在onActivityResult中,我将在检查请求代码之前输出到日志中。我确实有另一个被调用的活动,但从Fragment1调用并返回OK。我觉得这与在适配器中调用startActivityForResult有关?谢谢。我试过类似的方法,但做错了。谢谢你给我指明了正确的方向。我很高兴这有帮助:)
/**
* Receiver Class
* This setup checks for the incoming intent action to be able to
* attach more messages to one receiver.
*/
private class Radio extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(START_ACT)){
getDataFromActivity();
}
}
}
public void getDataFromActivity(){
Intent intent = new Intent(getActivity(), Activity.class);
Bundle extras = new Bundle();
extras.putBoolean("denyEditPermission", true);
intent.putExtras(extras);
startActivityForResult(intent, 1);
}
context.sendBroadcast(new Intent(Fragment1.START_ACT));