首页 > 解决方案 > 如何在 Android Studio 中禁用外部库活动中的后退按钮?

问题描述

我正在使用这个库: https ://github.com/suchoX/PlacePicker

如何禁用此地点选择器活动的物理后退按钮?

在此处输入图像描述

这是打开此活动的代码:

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

import com.sucho.placepicker.AddressData;
import com.sucho.placepicker.Constants;
import com.sucho.placepicker.PlacePicker;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Intent intent = new PlacePicker.IntentBuilder()
                .setLatLong(40.748672, -73.985628)  // Initial Latitude and Longitude the Map will load into
                .showLatLong(true)  // Show Coordinates in the Activity
                .setMapZoom(12.0f)  // Map Zoom Level. Default: 14.0
                .onlyCoordinates(true) //Get only Coordinates from Place Picker
                .build(this);

        startActivityForResult(intent, Constants.PLACE_PICKER_REQUEST);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if (requestCode == Constants.PLACE_PICKER_REQUEST) {
            if (resultCode == Activity.RESULT_OK && data != null) {
                AddressData addressData = data.getParcelableExtra(Constants.ADDRESS_INTENT);
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
}

我知道以下是通常如何禁用物理后退按钮,但是在这种情况下我该怎么做呢?

@Override
public void onBackPressed() {
    // do nothing because you don't want them to leave when it's pressed
}

标签: javaandroidandroid-studio

解决方案


扩建图书馆怎么样?这些类不是最终的,我认为您需要的只是扩展 Activity 类并且可能是构建器类。首先检查activityClass。这可能是可能的扩展类。

import com.mapbox.mapboxsdk.places.R;

class YourPickerActivity extends PlacePickerActivity{

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addBackButtonListener()
}
@Override
public void onBackPressed() {
    // do nothing because you don't want them to leave when it's pressed
}

private void addBackButtonListener() {
    ImageView backButton = findViewById(R.id.mapbox_place_picker_toolbar_back_button);
    backButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //doNothing
        }
    });
    //or hide the button
    }
}

正如文档所说,您应该使用构建器类来启动活动。BuilderClass我认为构建器类是最终的,因此您不能扩展该类,但该类本身只做两项工作:添加访问令牌和添加 placePicker 选项。因此,如果您使用带有此类键名的意图数据调用yourCustomPickerActivity


推荐阅读