从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
应该是承载此RecyclerView
的Activity
。 然后,您将不会收到此错误。
在我的例子中用this
替换getApplicationContext()
有帮助。
例如我有:
adapter= new CustomAdapter(dataModels,getApplicationContext());
在我的活动文件中将其更改为:
adapter= new CustomAdapter(dataModels,this);
并修复了错误。
- 如何区分投掷和触摸?
- Java:HTTP Post在Ruby on Rails应用程序中创建新的“Product”
- 我该如何删除按钮?
- MPAndroidChart条形图 – 如何在组之间对随机x轴间隔的条形图进行分组?
- ANDROID和PHP – 如何使用PHP从MySql显示JSONArray
- Android:“意外的流结束”exception下载大文件
- 将图像从一个活动发送到另一个活动
- Android webview.postUrl(url,Encodingutils.getBytes(postData,“BASE64”))从postdata字符串中删除“+”
- 防止在设备旋转时重新创建Android片段