Android 使用“回收器”视图中的按钮打开地图

Android 使用“回收器”视图中的按钮打开地图,android,Android,我正试图为一个出现在回收器视图中的卡片上的按钮设置一个意图,但是我在startActivity(意图)部分遇到一个错误,它说“无法解析方法‘startActivity(android.Content.intent)’”。我不熟悉这个,我不确定我在哪里出错,因为代码在我的应用程序的其他部分工作 这是我的适配器,显示了我的代码: public class EventCalenderAdapter extends RecyclerView.Adapter<EventCalenderAdapter

我正试图为一个出现在回收器视图中的卡片上的按钮设置一个意图,但是我在startActivity(意图)部分遇到一个错误,它说“无法解析方法‘startActivity(android.Content.intent)’”。我不熟悉这个,我不确定我在哪里出错,因为代码在我的应用程序的其他部分工作

这是我的适配器,显示了我的代码:

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;
}


}