Android 我在适配器中使用上下文时出错,我想在适配器中使用startActivityForResult(…),我应该怎么做?
并提前感谢您的建议 MainActivity.java Myadapter.java 可以在适配器中调用startActivityForResult吗? 为什么MacActivity=ActivityContext;上出现错误 p、 s:我试图创建一个方法 公共无效开始内容一{ startActivityForResulti,2; }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
并在适配器中调用它…但适配器需要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();
}
});