当前位置: 首页 > 面试题库 >

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

左丘兴生
2023-03-14
问题内容

我在Android的新的,试图通过一个适配器去到下一个活动,我使用onBindViewHolder()同一个Intent,下面是代码:

@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<CurrencyViewHolder> {

    private List<BureauRateObject> itemList;
    private Context context;

    public CurrencySelectorAdapter(List<BureauRateObject> 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();
    }
}

问题答案:

Context你传递到CurrencySelectorAdapter构造函数应该是Activity万军此RecyclerView。然后,您将不会收到此错误。



 类似资料: