无法在 RecyclerAdapter 中设置方法 setResult
Can't set method setResult in RecyclerAdapter
在我的应用程序中,我需要启动 RecyclerAdapter.class 并等待结果,但我无法编写行 setResult 并完成:
public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView title;
ImageView icon;
public MyViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.list_title);
icon = (ImageView) itemView.findViewById(R.id.list_item);
icon.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String selectedCountry;
int country = getPosition();
String ololo = Integer.toString(country);
Log.i("WORKS" ,"Выюрана страна под номером" +ololo);
switch (getPosition()) {
case 0:
selectedCountry = "ukr";
Log.i ("1" ,"" +selectedCountry);
Intent intent= new Intent();
intent.putExtra("country", selectedCountry);
break;
case 1:
selectedCountry = "by";
Log.i ("1" ,"" +selectedCountry);
break;
case 2:
selectedCountry = "rus";
Log.i ("1" ,"" +selectedCountry);
break;
case 3:
selectedCountry = "nrus";
Log.i ("1" ,"" +selectedCountry);
break;
}
//intent. putExtra("country")
}
}
我需要怎么写?请帮助我并解释我做错了什么
我需要从所有案例中设置结果
编辑:
public class RecyclerAdapterChooseCountry extends RecyclerView.Adapter<RecyclerAdapterChooseCountry.MyViewHolder> {
private LayoutInflater inflater;
List<CountryInformation> data = Collections.emptyList();
public RecyclerAdapterChooseCountry(Context context, List<CountryInformation> data) {
inflater = LayoutInflater.from(context);
this.data = data;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.country_list, parent, false);
MyViewHolder holder = new MyViewHolder(view, mActivity /*<- cant add this*/ );
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
CountryInformation information = data.get(position);
holder.title.setText(information.title);
holder.icon.setImageResource(information.iconId);
}
@Override
public int getItemCount() {
return data.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView title;
ImageView icon;
private Activity mActivity;
public MyViewHolder(View itemView, Activity mActivity ) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.list_title);
icon = (ImageView) itemView.findViewById(R.id.list_item);
icon.setOnClickListener(this);
this.mActivity = mActivity;
}
@Override
public void onClick(View v) {
String selectedCountry;
int country = getPosition();
String ololo = Integer.toString(country);
Log.i("WORKS", "Выюрана страна под номером" + ololo);
switch (getPosition()) {
case 0:
selectedCountry = "ukr";
Log.i("1", "" + selectedCountry);
Intent intent = new Intent();
intent.putExtra("country", selectedCountry);
mActivity.setResult(mActivity.RESULT_OK, intent);
mActivity.finish();
break;
case 1:
selectedCountry = "by";
Log.i("1", "" + selectedCountry);
break;
case 2:
selectedCountry = "rus";
Log.i("1", "" + selectedCountry);
break;
case 3:
selectedCountry = "nrus";
Log.i("1", "" + selectedCountry);
break;
}
}
}
}
Can't set method setResult in RecyclerAdapter
setResult
在 MyViewHolder
class 中不可访问,因为 setResult 在 Activity class
中定义
为了从非 Activity class 访问 setResult
在创建适配器对象时在适配器构造函数中传递 Activity 上下文:
private Activity mActivity;
public MyViewHolder(View itemView,Activity mActivity) {
super(itemView);
/...your code here..
this.mActivity=mActivity;
}
使用 mActivity
在按钮的 onClick 中访问 setResult
您可以从上下文中获取activity
if (context instanceof Activity)
((Activity) context).setResult(Activity.RESULT_OK, intent);
Activity对象和上下文对象之间有区别(如果有混淆,最好阅读文档以便更好地理解)
所以,答案很简单,
如果您想进行基于 activity 的操作,请按照以下步骤进行操作
Activity activity = this;
Context context = ActivityName.this;
传递适配器中的两个对象,然后使用
activity.setResult(Activity.RESULT_OK,intent);
activity.finish();
并且对于基于上下文的操作使用
Intent i = new Intent(ListViewAdapter.this.mContext,EventPrivacyAndTicketPrice.class);
查看下面的完整 activity 代码:
public class EventType extends AppCompatActivity {
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_set_ticket_type_and_price);
intent = getIntent();
ListView listView = findViewById(R.id.event_type_list_view);
ArrayList<ETypeObject> allTypes= new ArrayList<>();
allTypes = GetData();
ListViewAdapter listViewAdapter= new ListViewAdapter(allTypes,EventType.this,intent,this);
listView.setAdapter(listViewAdapter);
}
public ArrayList<ETypeObject> GetData(){
ArrayList<ETypeObject> allTypes= new ArrayList<>();
allTypes.add(new ETypeObject("Conference",0));
allTypes.add(new ETypeObject("Seminar, Talk",0));
allTypes.add(new ETypeObject("Tradeshow, Expo, Product Launch",0));
return allTypes;
}
}
class ETypeObject {
public String name;
public int imageId;
public ETypeObject(String name, int imageId) {
this.name = name;
this.imageId = imageId;
}
public ETypeObject() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImageId() {
return imageId;
}
public void setImageId(int imageId) {
this.imageId = imageId;
}
}
class ListViewAdapter extends BaseAdapter{
Activity activity;
Context mContext;
ArrayList<ETypeObject> allTypes= new ArrayList<>();
Intent intent;
public ListViewAdapter(){}
public ListViewAdapter(ArrayList<ETypeObject> AllTypes, Context context,Intent intent,Activity activity){
mContext = context;
allTypes = AllTypes;
activity =activity;
this.intent = intent;
}
@Override
public int getCount() {
return allTypes.size();
}
@Override
public Object getItem(int i) {
return allTypes.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i1, View view, ViewGroup viewGroup) {
LayoutInflater layoutInflater= (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (layoutInflater!=null){
view = layoutInflater.inflate(R.layout.lay1,null);
}
TextView type;
type = view.findViewById(R.id.parentInteresttext);
type.setText(allTypes.get(i1).getName());
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(mContext,allTypes.get(i1).getName(),Toast.LENGTH_LONG).show();
if (intent.getBooleanExtra("fromThirdActivty",false)){
Intent i = new Intent();
i.putExtra("eventType",allTypes.get(i1).getName());
activity.setResult(Activity.RESULT_OK,intent);
activity.finish();
}
Intent i = new Intent( ListViewAdapter.this.mContext,OtherActivity.class);
i.putExtra("eventType",allTypes.get(i1).getName());
ListViewAdapter.this.mContext.startActivity(i);
}
});
return view;
}
}
您可以通过将 activity 作为参数传递给 RecyclerAdapter
来使用 setResult()
和 finish()
,然后使用 activity.setResult()
、[=14= 访问它]
对于java:
Intent intent = new Intent();
intent.putExtra("dataKey","DataValue");
((YOURACTIVITY)context).setResult(2,intent);
对于 Kotlin:
(context as YourActivity).setResult()
在我的应用程序中,我需要启动 RecyclerAdapter.class 并等待结果,但我无法编写行 setResult 并完成:
public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView title;
ImageView icon;
public MyViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.list_title);
icon = (ImageView) itemView.findViewById(R.id.list_item);
icon.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String selectedCountry;
int country = getPosition();
String ololo = Integer.toString(country);
Log.i("WORKS" ,"Выюрана страна под номером" +ololo);
switch (getPosition()) {
case 0:
selectedCountry = "ukr";
Log.i ("1" ,"" +selectedCountry);
Intent intent= new Intent();
intent.putExtra("country", selectedCountry);
break;
case 1:
selectedCountry = "by";
Log.i ("1" ,"" +selectedCountry);
break;
case 2:
selectedCountry = "rus";
Log.i ("1" ,"" +selectedCountry);
break;
case 3:
selectedCountry = "nrus";
Log.i ("1" ,"" +selectedCountry);
break;
}
//intent. putExtra("country")
}
}
我需要怎么写?请帮助我并解释我做错了什么 我需要从所有案例中设置结果
编辑:
public class RecyclerAdapterChooseCountry extends RecyclerView.Adapter<RecyclerAdapterChooseCountry.MyViewHolder> {
private LayoutInflater inflater;
List<CountryInformation> data = Collections.emptyList();
public RecyclerAdapterChooseCountry(Context context, List<CountryInformation> data) {
inflater = LayoutInflater.from(context);
this.data = data;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.country_list, parent, false);
MyViewHolder holder = new MyViewHolder(view, mActivity /*<- cant add this*/ );
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
CountryInformation information = data.get(position);
holder.title.setText(information.title);
holder.icon.setImageResource(information.iconId);
}
@Override
public int getItemCount() {
return data.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView title;
ImageView icon;
private Activity mActivity;
public MyViewHolder(View itemView, Activity mActivity ) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.list_title);
icon = (ImageView) itemView.findViewById(R.id.list_item);
icon.setOnClickListener(this);
this.mActivity = mActivity;
}
@Override
public void onClick(View v) {
String selectedCountry;
int country = getPosition();
String ololo = Integer.toString(country);
Log.i("WORKS", "Выюрана страна под номером" + ololo);
switch (getPosition()) {
case 0:
selectedCountry = "ukr";
Log.i("1", "" + selectedCountry);
Intent intent = new Intent();
intent.putExtra("country", selectedCountry);
mActivity.setResult(mActivity.RESULT_OK, intent);
mActivity.finish();
break;
case 1:
selectedCountry = "by";
Log.i("1", "" + selectedCountry);
break;
case 2:
selectedCountry = "rus";
Log.i("1", "" + selectedCountry);
break;
case 3:
selectedCountry = "nrus";
Log.i("1", "" + selectedCountry);
break;
}
}
}
}
Can't set method setResult in RecyclerAdapter
setResult
在 MyViewHolder
class 中不可访问,因为 setResult 在 Activity class
为了从非 Activity class 访问 setResult
在创建适配器对象时在适配器构造函数中传递 Activity 上下文:
private Activity mActivity;
public MyViewHolder(View itemView,Activity mActivity) {
super(itemView);
/...your code here..
this.mActivity=mActivity;
}
使用 mActivity
在按钮的 onClick 中访问 setResult
您可以从上下文中获取activity
if (context instanceof Activity)
((Activity) context).setResult(Activity.RESULT_OK, intent);
Activity对象和上下文对象之间有区别(如果有混淆,最好阅读文档以便更好地理解) 所以,答案很简单,
如果您想进行基于 activity 的操作,请按照以下步骤进行操作
Activity activity = this;
Context context = ActivityName.this;
传递适配器中的两个对象,然后使用
activity.setResult(Activity.RESULT_OK,intent);
activity.finish();
并且对于基于上下文的操作使用
Intent i = new Intent(ListViewAdapter.this.mContext,EventPrivacyAndTicketPrice.class);
查看下面的完整 activity 代码:
public class EventType extends AppCompatActivity {
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_set_ticket_type_and_price);
intent = getIntent();
ListView listView = findViewById(R.id.event_type_list_view);
ArrayList<ETypeObject> allTypes= new ArrayList<>();
allTypes = GetData();
ListViewAdapter listViewAdapter= new ListViewAdapter(allTypes,EventType.this,intent,this);
listView.setAdapter(listViewAdapter);
}
public ArrayList<ETypeObject> GetData(){
ArrayList<ETypeObject> allTypes= new ArrayList<>();
allTypes.add(new ETypeObject("Conference",0));
allTypes.add(new ETypeObject("Seminar, Talk",0));
allTypes.add(new ETypeObject("Tradeshow, Expo, Product Launch",0));
return allTypes;
}
}
class ETypeObject {
public String name;
public int imageId;
public ETypeObject(String name, int imageId) {
this.name = name;
this.imageId = imageId;
}
public ETypeObject() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImageId() {
return imageId;
}
public void setImageId(int imageId) {
this.imageId = imageId;
}
}
class ListViewAdapter extends BaseAdapter{
Activity activity;
Context mContext;
ArrayList<ETypeObject> allTypes= new ArrayList<>();
Intent intent;
public ListViewAdapter(){}
public ListViewAdapter(ArrayList<ETypeObject> AllTypes, Context context,Intent intent,Activity activity){
mContext = context;
allTypes = AllTypes;
activity =activity;
this.intent = intent;
}
@Override
public int getCount() {
return allTypes.size();
}
@Override
public Object getItem(int i) {
return allTypes.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i1, View view, ViewGroup viewGroup) {
LayoutInflater layoutInflater= (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (layoutInflater!=null){
view = layoutInflater.inflate(R.layout.lay1,null);
}
TextView type;
type = view.findViewById(R.id.parentInteresttext);
type.setText(allTypes.get(i1).getName());
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(mContext,allTypes.get(i1).getName(),Toast.LENGTH_LONG).show();
if (intent.getBooleanExtra("fromThirdActivty",false)){
Intent i = new Intent();
i.putExtra("eventType",allTypes.get(i1).getName());
activity.setResult(Activity.RESULT_OK,intent);
activity.finish();
}
Intent i = new Intent( ListViewAdapter.this.mContext,OtherActivity.class);
i.putExtra("eventType",allTypes.get(i1).getName());
ListViewAdapter.this.mContext.startActivity(i);
}
});
return view;
}
}
您可以通过将 activity 作为参数传递给 RecyclerAdapter
来使用 setResult()
和 finish()
,然后使用 activity.setResult()
、[=14= 访问它]
对于java:
Intent intent = new Intent();
intent.putExtra("dataKey","DataValue");
((YOURACTIVITY)context).setResult(2,intent);
对于 Kotlin:
(context as YourActivity).setResult()