如何在 Android Studio 中禁用外部库活动中的后退按钮?

Pan*_*eet 0 java android 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

WHO*_*HOA 6

扩展图书馆怎么样?这些类不是最终的,我认为您所需要的只是扩展 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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • [构建器](https://github.com/suchoX/PlacePicker/blob/ddd47705478df34905aa8086816eef99caa2576c/placepicker/src/main/java/com/sucho/placepicker/PlacePicker.kt)和[PickerActivity](https://github.com/placepicker/src/main/java/com/sucho/placepicker/PlacePicker.kt) com/suchoX/PlacePicker/blob/ddd47705478df34905aa8086816eef99caa2576c/placepicker/src/main/java/com/sucho/placepicker/PlacePickerActivity.kt) 不可扩展。您可以从 PickerActivity 中复制/粘贴代码,修改 onBackPress 并以与构建器中相同的方式启动 Activity。我认为第二个库使用谷歌地图API并没有什么特别的,最好自己实现它。 (2认同)

Loï*_*mas 5

一个解决方案可能是创建一个抽象的 Activity 来覆盖onBackPressed(). 那么你所有的活动都需要扩展这个新的活动。

public abstract class NoBackPressedActivity extends AppCompatActivity {
    @Override
    public void onBackPressed() {
        // do nothing because you don't want them to leave when it's pressed
    }
}
Run Code Online (Sandbox Code Playgroud)

此解决方案的一个问题是,如果您需要扩展另一种类型的活动。

不要忘记,不建议onBackPressed()在所有应用程序中禁用。