首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android:如何验证AutocompleteSupportFragment不是空的?

Android:如何验证AutocompleteSupportFragment不是空的?
EN

Stack Overflow用户
提问于 2019-12-06 01:02:07
回答 2查看 360关注 0票数 4

我在一个AutocompleteSupportFragment中添加了一个AlertDialog。

AlertDialog

我希望确保在用户单击“创建”按钮后,位置字段不会为空。(就像我如何确保其他字段不为空一样。)

字段验证

我希望有像setOnPlaceUnselectedListener.这样的东西但是AutocompleteSupportFragment只有setOnPlaceSelectedListener,这并不理想,因为它不知道用户是否进入某个位置,然后清除输入。

AutocompleteSupportFragment确实有一个setText方法来设置在搜索输入字段中显示的文本。但它似乎没有相应的getText方法。

是否要验证AutocompleteSupportFragment是否选择了某个位置或是否为空?.xml

代码语言:javascript
运行
复制
<fragment android:id="@+id/create_event_location_frag"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:name="com.google.android.libraries.places.widget.AutocompleteSupportFragment" />

Activity.java

代码语言:javascript
运行
复制
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
            @Override
            public void onPlaceSelected(Place place) {
                // Updating my class variables here doesn't help. 
                // If user first selects a place, then clears it and click "Create", 
                // I won't know that the location field is empty.
                Log.i(TAG, "Place: " + place.getName() + ", " + place.getId());
            }

            @Override
            public void onError(Status status) {
                Log.i(TAG, "An error occurred: " + status);
            }
        });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-08 09:01:06

您的理解是正确的,因为目前通过Places没有"setOnPlaceUnselectedListener“或"getText”或任何其他方法可以帮助您验证输入是否为空。

然而,在谷歌的“问题跟踪器”中,有一个相关的特性要求公开一个onClearListener(),我建议使用它来提高可见性和订阅通知:

https://issuetracker.google.com/issues/35828573

此外,有一个“黑客”或解决办法在其中一个评论中提到,以获得清除按钮的View。注意,对于AutocompleteSupportFragment,按钮的id是places_autocomplete_clear_button

例如,您可以创建一个类变量:

代码语言:javascript
运行
复制
private String selectedPlace = null;

并将其用作已选定或未选定的位置的标志。

代码语言:javascript
运行
复制
    autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {

        @Override
        public void onPlaceSelected(Place place) {
            selectedPlace = place.getName();
        }

        @Override
        public void onError(Status status) {
            selectedPlace = null;
        }

    });

    View clearButton = autocompleteFragment.getView().findViewById(R.id.places_autocomplete_clear_button);
    clearButton.setOnClickListener(view -> {
        autocompleteFragment.setText("");
        selectedPlace = null;
    });

    final Button button = findViewById(R.id.button_id);
    button.setOnClickListener(v -> {
        if (selectedPlace == null) {
            Toast.makeText(getApplicationContext(), "Location cannot be empty", Toast.LENGTH_LONG).show();
        }
    });

我已经测试了我的终端,所以我可以确认它的工作,我希望它也能帮助你!

票数 1
EN

Stack Overflow用户

发布于 2020-04-12 04:21:31

我已经回答过这个这里了。你可以在片段中找到清晰的按钮并听它。

代码语言:javascript
运行
复制
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
    @Override
    public void onPlaceSelected(Place place) {
        homeAddressPlaceID = place.getId();
        Log.i(TAG, "Place: " + place.getName() + ", " + place);

        autocompleteFragment.getView().findViewById(R.id.places_autocomplete_clear_button)
                .setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        autocompleteFragment.setText("");
                        homeAddressPlaceID = "";
                    }
                });
    }

    @Override
    public void onError(Status status) {
        Log.i(TAG, "An error occurred: " + status);
    }
});

在此之后,您只需检查homeAddressPlaceID是否为空。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59205440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档