Android 使用“回收器”视图中的按钮打开地图
我正试图为一个出现在回收器视图中的卡片上的按钮设置一个意图,但是我在startActivity(意图)部分遇到一个错误,它说“无法解析方法‘startActivity(android.Content.intent)’”。我不熟悉这个,我不确定我在哪里出错,因为代码在我的应用程序的其他部分工作 这是我的适配器,显示了我的代码:Android 使用“回收器”视图中的按钮打开地图,android,Android,我正试图为一个出现在回收器视图中的卡片上的按钮设置一个意图,但是我在startActivity(意图)部分遇到一个错误,它说“无法解析方法‘startActivity(android.Content.intent)’”。我不熟悉这个,我不确定我在哪里出错,因为代码在我的应用程序的其他部分工作 这是我的适配器,显示了我的代码: public class EventCalenderAdapter extends RecyclerView.Adapter<EventCalenderAdapter
public class EventCalenderAdapter extends RecyclerView.Adapter<EventCalenderAdapter.ViewHolder> {
String[] title;
String[] time_start;
String[] time_finish;
String[] date;
String[] description;
String[] loc_lat;
String[] loc_long;
static class ViewHolder extends RecyclerView.ViewHolder {
CardView cardView;
TextView titleView;
TextView auxView1;
TextView auxView2;
TextView auxView3;
Button time_date;
Button location;
public ViewHolder(CardView card) {
super(card);
cardView = card;
titleView = (TextView) card.findViewById(R.id.text1);
auxView1 = (TextView) card.findViewById(R.id.text2);
auxView2 = (TextView) card.findViewById(R.id.text3);
auxView3 = (TextView) card.findViewById(R.id.text4);
time_date = (Button) card.findViewById(R.id.time_date);
location = (Button) card.findViewById(R.id.location);
}
}
public EventCalenderAdapter (Context context) {
title = context.getResources().getStringArray(R.array.title);
time_start = context.getResources().getStringArray(R.array.time_start);
time_finish = context.getResources().getStringArray(R.array.time_finish);
date = context.getResources().getStringArray(R.array.date);
description = context.getResources().getStringArray(R.array.description);
loc_lat = context.getResources().getStringArray(R.array.loc_lat);
loc_long = context.getResources().getStringArray(R.array.loc_long);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int i) {
CardView v = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.event_task, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int i) {
viewHolder.titleView.setText(title[i]);
viewHolder.auxView1.setText("Date: "+ date[i]);
viewHolder.auxView2.setText("Time: " + time_start[i] + " - " + time_finish[i]);
viewHolder.auxView3.setText("Details: " + description[i]);
viewHolder.time_date.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
viewHolder.location.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String uri = String.format(Locale.ENGLISH, "geo:%f,%f", loc_lat[i], loc_long[i]);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return title.length;
}
}
公共类EventCalendarAdapter扩展了RecyclerView.Adapter{
字符串[]标题;
字符串[]开始时间;
字符串[]完成时间;
字符串[]日期;
字符串[]说明;
字符串[]loc_lat;
字符串[]loc_long;
静态类ViewHolder扩展了RecyclerView.ViewHolder{
卡德维尤;
文本视图标题视图;
文本视图auxView1;
文本视图auxView2;
文本视图auxView3;
按钮时间和日期;
按钮位置;
公众视图持有人(CardView卡){
超级卡;
卡片视图=卡片;
titleView=(TextView)card.findViewById(R.id.text1);
auxView1=(TextView)card.findViewById(R.id.text2);
auxView2=(TextView)card.findViewById(R.id.text3);
auxView3=(TextView)card.findViewById(R.id.text4);
时间\日期=(按钮)card.findViewById(R.id.time\日期);
位置=(按钮)card.findViewById(R.id.location);
}
}
公共事件日历适配器(上下文){
title=context.getResources().getStringArray(R.array.title);
time\u start=context.getResources().getStringArray(R.array.time\u start);
time\u finish=context.getResources().getStringArray(R.array.time\u finish);
日期=context.getResources().getStringArray(R.array.date);
description=context.getResources().getStringArray(R.array.description);
loc_lat=context.getResources().getStringArray(R.array.loc_lat);
loc_long=context.getResources().getStringArray(R.array.loc_long);
}
@凌驾
公共ViewHolder onCreateViewHolder(视图组父级,int i){
CardView v=(CardView)LayoutFlater.from(parent.getContext()).inflate(R.layout.event_任务,parent,false);
返回新的视图持有者(v);
}
@凌驾
公共无效onBindViewHolder(ViewHolder ViewHolder,最终int i){
viewHolder.titleView.setText(标题[i]);
viewHolder.auxView1.setText(“日期:“+Date[i]);
viewHolder.auxView2.setText(“Time:+Time\u start[i]+”-“+Time\u finish[i]);
viewHolder.auxView3.setText(“详细信息:+说明[i]);
viewHolder.time\u date.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
}
});
viewHolder.location.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
stringuri=String.format(Locale.ENGLISH,“geo:%f,%f”,loc_lat[i],loc_long[i]);
Intent Intent=newintent(Intent.ACTION_视图,Uri.parse(Uri));
星触觉(意向);
}
});
}
@凌驾
public int getItemCount(){
返回title.length;
}
}
您必须使用上下文
来调用startActivity()
这是ViewHolder类
static class ViewHolder extends RecyclerView.ViewHolder {
CardView cardView;
TextView titleView;
TextView auxView1;
TextView auxView2;
TextView auxView3;
Button time_date;
Button location;
Context context;
public ViewHolder(CardView card,Context context) {
super(card);
cardView = card;
titleView = (TextView) card.findViewById(R.id.text1);
auxView1 = (TextView) card.findViewById(R.id.text2);
auxView2 = (TextView) card.findViewById(R.id.text3);
auxView3 = (TextView) card.findViewById(R.id.text4);
time_date = (Button) card.findViewById(R.id.time_date);
location = (Button) card.findViewById(R.id.location);
this.context=context;
}
}
public EventCalenderAdapter (Context context) {
title = context.getResources().getStringArray(R.array.title);
time_start = context.getResources().getStringArray(R.array.time_start);
time_finish = context.getResources().getStringArray(R.array.time_finish);
date = context.getResources().getStringArray(R.array.date);
description = context.getResources().getStringArray(R.array.description);
loc_lat = context.getResources().getStringArray(R.array.loc_lat);
loc_long = context.getResources().getStringArray(R.array.loc_long);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int i) {
CardView v = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.event_task, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int i) {
viewHolder.titleView.setText(title[i]);
viewHolder.auxView1.setText("Date: "+ date[i]);
viewHolder.auxView2.setText("Time: " + time_start[i] + " - " + time_finish[i]);
viewHolder.auxView3.setText("Details: " + description[i]);
viewHolder.time_date.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
viewHolder.location.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String uri = String.format(Locale.ENGLISH, "geo:%f,%f", loc_lat[i], loc_long[i]);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return title.length;
}
}
试试我的答案,我不能试试,我只知道你需要将
上下文
传递给你的适配器现在它说的是无法解析符号上下文,我需要在某个地方声明上下文吗?你添加了上下文
?我添加了所有内容我甚至把它放在声明字符串数组的静态类之上,应用程序运行,但随后强制停止。我将代码的ViewHolder vh部分放在哪里?我已将所有其他部分放在其中,现在我在onCreateViewHolder中得到一个错误,表示无法应用ViewHolder(v),并且它仍然无法解析意图中的符号
static class ViewHolder extends RecyclerView.ViewHolder {
CardView cardView;
TextView titleView;
TextView auxView1;
TextView auxView2;
TextView auxView3;
Button time_date;
Button location;
Context context;
public ViewHolder(CardView card,Context context) {
super(card);
cardView = card;
titleView = (TextView) card.findViewById(R.id.text1);
auxView1 = (TextView) card.findViewById(R.id.text2);
auxView2 = (TextView) card.findViewById(R.id.text3);
auxView3 = (TextView) card.findViewById(R.id.text4);
time_date = (Button) card.findViewById(R.id.time_date);
location = (Button) card.findViewById(R.id.location);
this.context=context;
}
}
public EventCalenderAdapter (Context context) {
title = context.getResources().getStringArray(R.array.title);
time_start = context.getResources().getStringArray(R.array.time_start);
time_finish = context.getResources().getStringArray(R.array.time_finish);
date = context.getResources().getStringArray(R.array.date);
description = context.getResources().getStringArray(R.array.description);
loc_lat = context.getResources().getStringArray(R.array.loc_lat);
loc_long = context.getResources().getStringArray(R.array.loc_long);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int i) {
CardView v = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.event_task, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int i) {
viewHolder.titleView.setText(title[i]);
viewHolder.auxView1.setText("Date: "+ date[i]);
viewHolder.auxView2.setText("Time: " + time_start[i] + " - " + time_finish[i]);
viewHolder.auxView3.setText("Details: " + description[i]);
viewHolder.time_date.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
viewHolder.location.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String uri = String.format(Locale.ENGLISH, "geo:%f,%f", loc_lat[i], loc_long[i]);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return title.length;
}
}