我的方法在 onKeyEntered 内部不起作用

Tim*_*ith 6 java android geolocation geofire firebase-realtime-database

我正在尝试创建一个应用程序,允许用户租用离他们最近的汽车。一旦我找到最近的汽车,我想用 textView 和 imageView 构建一个 cardView,我创建了方法 buildCardView 来做到这一点。我的问题是,cardView 在调用时没有被创建。当我直接调用它时,buildCardView 工作正常,但在 Geoquery onKeyEntered 方法内部调用时则不行。我调试了代码,并且在 onKeyEntered 内部调用了 buildCardView 方法,但 cardView 不可见。下面是调用 firebase 方法的代码。

FindCar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
                   findClosestCars();
        }
    });
Run Code Online (Sandbox Code Playgroud)

下面是调用 buildCardView 的 firebase 方法

private void findClosestCars() {
    if (ActivityCompat.checkSelfPermission(RentersMenuPageActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

     //  turnOnLocationUpdates();
        //fusedLocationClient.requestLocationUpdates(mLocationRequest, locationCallback, Looper.myLooper());

        databaseReference = FirebaseDatabase.getInstance().getReference("Users").child("Lenders");
        GeoFire geoFire = new GeoFire(databaseReference);
        GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(latitude, longitude), radius);
        geoQuery.removeAllListeners();

        geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
            @Override
            public void onKeyEntered(String key, GeoLocation location) {
           //
                //  Toast.makeText(RentersMenuPageActivity.this, "You Found a Lender",Toast.LENGTH_LONG);
                  //      Toast.LENGTH_LONG).show();


                //showPictureAndPrice();

                if (!driverFound) {
                    driverFound = true;
                    driverFoundID = key;

                    closestLender = FirebaseDatabase.getInstance().getReference("Users").child("Lenders").child(driverFoundID);

                    String [] lenderLocations;

                    buildCardView();
                }

               radius++;
            }
Run Code Online (Sandbox Code Playgroud)

下面是 buildCardView,它在主视图内扩展了一个较小的视图(直接调用时有效,但不能从 onkeyentered 调用)

private void buildCardView(){
    Toast.makeText(RentersMenuPageActivity.this, "You Found a Lender",Toast.LENGTH_LONG).show();

    LayoutInflater mInflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    View view =getLayoutInflater().inflate(R.layout.card,null);

   // CardView cardView = view.findViewById(R.id.cardView);
    Button rentCarButton = view.findViewById(R.id.rentCarButton);
    TextView price= view.findViewById(R.id.price);
    TextView makeandmodel = view.findViewById(R.id.makeandmodel);
    ImageView imageView =view.findViewById(R.id.imageViewScroll);

    LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    linearLayout.addView(view);
}
Run Code Online (Sandbox Code Playgroud)

Ujj*_*apa 0

尝试将活动实例创建为

AppCompatActivity activity = YourActivity.this;
Run Code Online (Sandbox Code Playgroud)

然后使用您的代码:

private void buildCardView(){
    Toast.makeText(activity, "You Found a Lender",Toast.LENGTH_LONG).show();

    //changed here
    LayoutInflater mInflater = (LayoutInflater) activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

    //changed here
    View view =activity.getLayoutInflater().inflate(R.layout.card,null); 

    // CardView cardView = view.findViewById(R.id.cardView);
    Button rentCarButton = view.findViewById(R.id.rentCarButton);
    TextView price= view.findViewById(R.id.price);
    TextView makeandmodel = view.findViewById(R.id.makeandmodel);
    ImageView imageView =view.findViewById(R.id.imageViewScroll);

    LinearLayout.LayoutParams linearLayout = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    relativeLayoutMainLayout.addView(view);
}
Run Code Online (Sandbox Code Playgroud)

在 GeoQueryDataEventListener 上进行测试,卡片视图出现了。