3

我想在活动完成加载后自动点击一个片段。PlaceAutocompleteFragment:自动打开SearchView

片段的定义是:

<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); 
     } 
    }); 
+0

你这是什么预计在点击后发生? – azizbekian

+0

请检查这个视频 https://www.youtube.com/watch?v=9RfQOrSlqPs&feature=youtu.be –

+0

我不想手动点击片段,因为它是不必要的。 –

回答

3

充气你不能点击一个<fragment>

点击事件是只有View可以有。片段是而不是 a 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()); 
} 

更新

由于您使用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.place_autocomplete_search_input) 
       .performClick(); 
    } 
}); 
+0

你好,我已经更新了我的代码。 包括使片段膨胀的方法。 不知道我怎么能得到一个参考:/ –

+0

我试图做你所问,但我得到一个错误,说“Lambda表达式不可用在这个语言水平” –

+1

@ GautamHans,已更新。 – azizbekian