从Activity上下文外部调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。 这真的是你想要的吗?

我是android的新手,试图通过适配器转到下一个Activity,我使用带有Intent onBindViewHolder() ,下面是代码:

 @Override public void onBindViewHolder(CurrencyViewHolder holder, int position) { final BureauRateObject br = itemList.get(position); holder.bureauname.setText(br.getBureau_name()); holder.rates.setText(br.getBuysell()); final String BureauId = br.getBureau_id(); final String BureauName = br.getBureau_name(); holder.root.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(context, SingleForexActivity.class); // i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.putExtra("bureau_id", BureauId); i.putExtra("bureau_name",BureauName); context.startActivity(i); } }); } 

这是出现的错误:

 android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? at android.app.ContextImpl.startActivity(ContextImpl.java:677) at android.app.ContextImpl.startActivity(ContextImpl.java:664) at android.content.ContextWrapper.startActivity(ContextWrapper.java:331) at Adapters.CurrencySelectorAdapter$1.onClick(CurrencySelectorAdapter.java:64) at android.view.View.performClick(View.java:5265) at android.view.View$PerformClick.run(View.java:21534) at android.os.Handler.handleCallback(Handler.java:815) at android.os.Handler.dispatchMessage(Handler.java:104) at android.os.Looper.loop(Looper.java:207) at android.app.ActivityThread.main(ActivityThread.java:5728) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679) 

我尝试了这个解决方案,但是下一个活动不会回到之前的活动。

我的解决方案:(但没有奏效)

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

以下是整个适配器代码:

  package Adapters; import android.content.Context; import android.content.Intent; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import com.example.naavanito.eamobileforex2.R; import com.example.naavanito.eamobileforex2.SingleForexActivity; import java.util.Currency; import java.util.List; import Holders.CurrencyViewHolder; import model.BureauRateObject; /** * Created by Admin on 1/21/2017. */ public class CurrencySelectorAdapter extends RecyclerView.Adapter { private List itemList; private Context context; public CurrencySelectorAdapter(List itemList, Context context) { this.itemList = itemList; this.context = context; } @Override public CurrencyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View layoutview = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_currency_rate,parent,false); CurrencyViewHolder rcv = new CurrencyViewHolder(layoutview,context); return rcv; } @Override public void onBindViewHolder(CurrencyViewHolder holder, int position) { final BureauRateObject br = itemList.get(position); holder.bureauname.setText(br.getBureau_name()); holder.rates.setText(br.getBuysell()); final String BureauId = br.getBureau_id(); final String BureauName = br.getBureau_name(); holder.root.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(context, SingleForexActivity.class); // i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.putExtra("bureau_id", BureauId); i.putExtra("bureau_name",BureauName); context.startActivity(i); } }); } @Override public int getItemCount() { return itemList.size(); } } 

传递给CurrencySelectorAdapter构造函数的Context应该是承载此RecyclerViewActivity 。 然后,您将不会收到此错误。

在我的例子中用this替换getApplicationContext()有帮助。

例如我有:

 adapter= new CustomAdapter(dataModels,getApplicationContext()); 

在我的活动文件中将其更改为:

 adapter= new CustomAdapter(dataModels,this); 

并修复了错误。