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)
尝试将活动实例创建为
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 上进行测试,卡片视图出现了。
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |