Android 我在适配器中使用上下文时出错,我想在适配器中使用startActivityForResult(…),我应该怎么做?

Android 我在适配器中使用上下文时出错,我想在适配器中使用startActivityForResult(…),我应该怎么做?,android,android-intent,android-activity,android-adapter,android-context,Android,Android Intent,Android Activity,Android Adapter,Android Context,并提前感谢您的建议 MainActivity.java Myadapter.java 可以在适配器中调用startActivityForResult吗? 为什么MacActivity=ActivityContext;上出现错误 p、 s:我试图创建一个方法 公共无效开始内容一{ startActivityForResulti,2; } 并在适配器中调用它…但适配器需要statxx静态和Activity非静态。上下文是Activity的基类。在Java中不能向下转换对象。这就是为什么不能执行mAc

并提前感谢您的建议

MainActivity.java

Myadapter.java

可以在适配器中调用startActivityForResult吗? 为什么MacActivity=ActivityContext;上出现错误

p、 s:我试图创建一个方法 公共无效开始内容一{ startActivityForResulti,2; }
并在适配器中调用它…但适配器需要statxx静态和Activity非静态。

上下文是Activity的基类。在Java中不能向下转换对象。这就是为什么不能执行mActivity=ActivityContext

您不能从as适配器类调用startActivityForResult,因为它是Activity.java类的方法。这里有一个解决方案,你可以试试- -声明一个接口。比如说IObserver.java

public interface IObserver {

    // change signature of method as per your need
    public abstract void onItemClicked();
    }
}
在适配器类中编写一个方法

公共无效setListenerIObserver obs{ mObserver=obs; }

在活动类中实现IObserver接口。您还需要实现mclicked方法

从活动的onCreate方法调用adapter.setListenerthis

在adapter类中,从onClick方法编写代码,如下所示
希望它能有所帮助。

您可以实现监听器,您可以在适配器中实现监听器。并使用OnActivityResult中的侦听器侦听方法触发。
class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
...
Context mContext;
Activity mActivity;
private static final int SELECT_PICTURE = 1;
private String selectedImagePath;

public static class ViewHolder extends RecyclerView.ViewHolder {...}

MyAdapter(Context context, String Titles[],int Icons[],String Name,String Email, int Profile){
    this.mContext = context;
    mNavTitles = Titles
    mIcons = Icons;
    name = Name;
    email = Email;
    profile = Profile;
}

@Override
public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
    if(holder.Holderid ==1) {                              
        holder.textView.setText(mNavTitles[position - 1]); 
        holder.imageView.setImageResource(mIcons[position -1]);
    }
    else{
        holder.profile.setImageResource(profile);           
        holder.Name.setText(name);
        holder.email.setText(email);
        holder.profile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mActivity = (Activity)mContext;
                Intent imageIntent = new Intent();
                imageIntent.setType("image/*");
                imageIntent.setAction(imageIntent.ACTION_GET_CONTENT);
                mActivity.startActivityForResult(Intent.createChooser(imageIntent, "Select photo"), 2);
            }
        });

    }
}
public interface IObserver {

    // change signature of method as per your need
    public abstract void onItemClicked();
    }
}
holder.profile.setOnClickListener(new View.OnClickListener() {
            @Override 
            public void onClick(View v) {
               // It will call method from activity class where you can do startActivityForResult()
               mObserver.onItemClicked();
            } 
        });