通过在recyclerview中单击按钮来打开Goog​​le地图

时间:2019-12-02 14:23:19

标签: android google-maps-api-3 android-recyclerview

在每个recyclerView中,我都有一个按钮,当按下该按钮时,将打开一个带有标记的地图片段。我正在尝试实施google地图,但被下面的**所限制。我无法调用getSupportFragmentManager,也无法解决“ this”。在这些字段中应输入什么适当的值?

感谢您的帮助!

public class HomeAdapter extends RecyclerView.Adapter<MyViewHolder> implements IAdapter, OnMapReadyCallback {

    Context context;
    ArrayList<Task> tasks;
    private DatabaseReference mDatabase, mDatabase2;
    GoogleMap mGoogleMaps;
    MapView mapView;


    public HomeAdapter(Context c, ArrayList<Task> t) {
        this.context = c;
        this.tasks = t;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
        mDatabase2 = FirebaseDatabase.getInstance().getReference().child("User").child(uid).child("tasks");
        mDatabase = FirebaseDatabase.getInstance().getReference().child("Task");
        return new MyViewHolder((LayoutInflater.from(context).inflate(R.layout.others_task_list, parent, false)), "Home");
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
        holder.description.setText(tasks.get(position).getDescription());
        holder.timedue.setText("Expires by: " + convertTime(tasks.get(position).getTimedue()));
        holder.deliveryfee.setText("Delivery Fee: $"+tasks.get(position).getDeliveryfee());

        String img = tasks.get(position).getImageURL();
        if (img.equals("default")) {
            holder.img.setImageResource(R.mipmap.ic_launcher);
        } else {
            Glide.with(holder.img.getContext()).load(img).into(holder.img);
        }
        int x = position;
        clickButton(holder.acceptTask, x);
        showLocation(holder.locationBtn, x);
    }

    public static boolean isAppAvailable(Context context, String appName) {
        PackageManager pm = context.getPackageManager();
        try {
            pm.getPackageInfo(appName, PackageManager.GET_ACTIVITIES);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            return false;
        }
    }

    @Override
    public int getItemCount() {
        return tasks.size();
    }

    public String convertTime(String timedueSTR){
        int timedueInt = (Integer.parseInt(timedueSTR));
        java.util.Date timedue = new java.util.Date((long) timedueInt * 1000);
        timedueSTR = String.valueOf(timedue);
        return timedueSTR.substring(0,16);
    }

    public void sendtoTele(String teleURL){
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("https://telegram.me/" + teleURL));
        final String appName = "org.telegram.messenger";
        final boolean isAppInstalled = isAppAvailable(context.getApplicationContext(), appName);
        if (isAppInstalled) {
            context.startActivity(intent);

        } else {
            Toast.makeText(context, "Telegram not Installed", Toast.LENGTH_SHORT).show();
        }
    }

    public void clickButton(Button button,final int position){
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Long tsLong = System.currentTimeMillis() / 1000;
                if (tsLong >= Long.valueOf(tasks.get(position).getTimedue()).longValue()) {
                    // to remove after time passes
                    Toast.makeText(context, "Sorry, this task has expired! :-(", Toast.LENGTH_LONG);
                    mDatabase.child(tasks.get(position).getTaskid()).removeValue();
                    mDatabase2.child(tasks.get(position).getTaskid()).removeValue();
                    return;
                }
                String teleURL = tasks.get(position).getTeleURL();
                if (tasks.get(position).getType().equals("Request")) {
                    mDatabase.child(tasks.get(position).getTaskid()).removeValue();
                    mDatabase2.child(tasks.get(position).getTaskid()).removeValue();
                }
                sendtoTele(teleURL);

            }
        });
    }

    public void showLocation(Button button, final int position, final MyViewHolder holder) {
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                **SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                        .findFragmentById(R.id.map);
                mapFragment.getMapAsync(this);**
            }
        });
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {

    }
}

0 个答案:

没有答案