Ok, j'ai les exigences suivantes:Sur certaines versions d'Android, ListView à l'intérieur de PopupWindow ne reçoit pas d'événements tactiles lorsque la popup n'est pas focalisable?
- Un EditText dans lequel si les types d'utilisateur @ un pop-up avec des suggestions apparaît
- L'utilisateur peut continuer à taper qui filtrera les suggestions
- L'utilisateur peut exploiter sur une suggestion qui complètera l'entrée et de rejeter le menu contextuel
- l'utilisateur peut taper à l'extérieur du pop-up qui rejeter
Voici mon code:
PopupWindow popupWindow = new PopupWindow(mContext);
// Create ListView to show the suggestions
ListView listView = new ListView(mContext);
listView.setBackgroundColor(Color.WHITE);
MentionsAdapter adapter = new MentionsAdapter(mContext, suggestions);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String username = mSuggestions.get(position);
String mentionCompletion = username.substring(mCurrentQuery.length()).concat(" ");
mEditor.getText().insert(mEditor.getSelectionEnd(), mentionCompletion);
hideSuggestions();
}
});
mSuggestionsListView = listView;
popupWindow.setContentView(listView);
popupWindow.setFocusable(false);
popupWindow.setTouchable(true);
popupWindow.setOutsideTouchable(true);
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
clearPopupData();
}
});
Rect popupRect = calculatePopupPosition();
popupWindow.setWidth(popupRect.width());
popupWindow.setHeight(popupRect.height());
popupWindow.showAtLocation(mEditor, Gravity.START | Gravity.TOP, popupRect.left, popupRect.top);
mPopupWindow = popupWindow;
Cela fonctionne! Le problème est que cela ne fonctionne que sur certaines versions/appareils Android. Par exemple, il fonctionne sur Android 6.0 sur l'émulateur, mais il ne fonctionne pas sur le LG G4 de mon collègue avec 6.0. Il ne fonctionne pas sur Android 4.3.1 mais fonctionne sur 4.4.2. Si le PopupWindow
ne peut pas être mis au point, le numéro ListView
OnItemClickListener
n'est pas appelé. Si le PopupWindow
est focalisable, le ListView
OnItemClickListener
est appelé mais EditText
ne reçoit pas les événements clavier. J'ai essayé d'innombrables combinaisons de changement de mode de mise au point/tactile sur le PopupWindow
et ListView
et ne pouvait pas le faire fonctionner dans ces cas.
Toutes les suggestions sur WFT se passe et comment y remédier?