PlaceAutocompleteFragment:自动打开SearchView

5
我希望在活动加载完成后自动点击一个片段。
片段定义如下:
 <fragment
    android:id="@+id/place_autocomplete_fragment"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
    />

我尝试过这样做。
fragment = findViewById(R.id.place_autocomplete_fragment);

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            fragment.performClick();
        }
    }, 1000);

但它没有起作用。

有没有自动点击片段的方法?

编辑: 在我的情况下,该片段是由以下方式膨胀的

//PlaceAutoComplete Search Implementation
    PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment)
            getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);


    autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(Place place) {
            Log.i(String.valueOf(this), "Place: " + place.getName() + "\nID: " + place.getId());
            String placeId = place.getId();
            try {
                Intent intent = new Intent(PlaceSearch.this, PlaceDetailsFromSearch.class);
                Bundle extras = new Bundle();
                extras.putString("placeID", placeId);
                intent.putExtras(extras);
                startActivity(intent);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

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

点击后您期望发生什么? - azizbekian
我不想手动点击片段,因为这有点不必要。 - Gautam Hans
2个回答

6

您不能点击 <fragment>

点击事件只能应用在 View 上,而碎片 不是 一个 View

您可以点击由碎片加载的 View

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    
    // some `View` from your fragment
    View searchView = view.findViewById(R.id.searchView); 
    // Dispatch a click event to `searchView` as soon as that view is laid out
    searchView.post(() -> searchView.performClick());
}

更新

由于您正在使用来自Play服务的PlaceAutocompleteFragment(因此您没有源代码),您可以在您的活动中执行以下操作:

final PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment) getFragmentManager()
        .findFragmentById(R.id.place_autocomplete_fragment);

final View root = autocompleteFragment.getView();
root.post(new Runnable() {
    @Override
    public void run() {
        root.findViewById(R.id.places_autocomplete_search_input)
                .performClick();
    }
});

你好,我已经更新了我的代码。包括正在展开该片段的方法。但不知道如何获取对它的引用 :/ - Gautam Hans
我尝试按照您的要求进行操作,但是出现了一个错误,提示“Lambda表达式在此语言级别不可用”。 - Gautam Hans

1

Kotlin: 对于最新的Places api 2.4.0(com.google.android.libraries.places:places:2.4.0),您可以通过以下代码获取视图,然后执行搜索视图上的单击操作:

val root: View = autocompleteSupportFragment?.view!!
root.findViewById<View>(R.id.places_autocomplete_search_input).performClick()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接