android.util.AndroidRuntimeException:从Activity外部调用startActivity()

时间:2018-06-01 05:47:15

标签: java android android-studio onclick

检查我的代码,这段代码在我的适配器中。但事情是我的手机完全支持应用程序和共享,但较低版本的手机不支持它在点击共享时被迫关闭。

 share.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String shareBody = "\t\t DIL KI BAAT \n\n" +sayari[position].toString().trim()+"\n\n\n"+ "https://play.google.com/store/apps/details?id="
                    + appPackageName;

            Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
            sharingIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            sharingIntent.setType("text/plain");
            sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
            context.startActivity(Intent.createChooser(sharingIntent, context.getResources()
                    .getString(R.string.app_name)));
        }
    });

3 个答案:

答案 0 :(得分:3)

在调用startActivity之前执行此操作

sharingIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);。如果您不使用活动上下文,则需要这样做。

答案 1 :(得分:1)

您需要为共享意图添加此标志,但对于意图,您将开始使用以下活动:

Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);

Intent startIntent = Intent.createChooser(sharingIntent, context.getResources().getString(R.string.app_name));
startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(startIntent);

答案 2 :(得分:1)

摆脱此问题的最佳方法是从适配器父活动启动活动。使用上下文对象或使用接口,将它们作为参数传递给适配器的构造函数。使用传递的引用调用活动中的方法。这是一个例子:

创建一个界面:

public interface ActivityInteractor{
    public void showDetails();
}

让你的活动改变它:

public class MyActivity extends Activity implements ActivityInteractor{
    public void showDetails(){
        //do stuff
    }
}

然后将您的活动传递给ListAdater:

public MyAdapter扩展BaseAdater {     私有ActivityInteractor侦听器;

public MyAdapter(ActivityInteractor listener){
    this.listener = listener;
}

} 在适配器的某个地方,当你需要调用那个Activity方法时:

listener.showDetails();