J'ai un J'ai essayé ListView code> qui prend tout l'écran, mais parfois, il ne dispose pas de suffisamment d'articles pour couvrir complètement le widget code> listview code>. J'aimerais pouvoir répondre à des clics sur cet espace vide sous le dernier élément qui ne contient pas réellement d'élément (signification
SetonitemClickListener code> n'est pas approprié). P>
SetonClickListener CODE> (qu'ils désactivent pour le
listview code>) sur une vue parent, mais des clics ne semblent pas l'atteindre. J'ai également essayé
setontouchlistener code> sur le
listview code>, mais cela a provoqué un élément de certains éléments pour ne pas vous inscrire pour une raison quelconque. Des idées sur la façon d'accomplir cela? P>
5 Réponses :
Un moyen potentiel d'atteindre est-il défini votre liste de réalisation sur layout.xml strong> p> Activité.java strong> < / p> Toutefois, si vous comptez sur votre hauteur de listeView étant Match_Parent pour une raison quelconque (c.-à-d. Fond Diable), cela ne sera pas une solution idéale. p> p> hauteur = "wrap_content" code> si vous le faites, vous pouvez avoir une substitution
aouetchevent () code> pour votre activité pour obtenir Les événements de lorsque l'utilisateur touche l'espace vide.
Avez-vous essayé ceci ou connaissez-vous la main si ListView interagit bien avec WraP_Content? Cela frappe juste mon intuition comme quelque chose qui ne serait pas bien géré: ne tentera-t-il pas de mesurer tous les enfants de la liste de liste?
Voici l'exemple Comment je l'ai fait: https://github.com/ MMOKRZYCKI / LISTVIEW-AVEC-CLICKABLE-VIDE-VIEW P>
J'ai essayé cela avec mon ListView qui contient des lignes ayant des editexts avec Textwatchers. Je suis capable d'attraper des événements d'espace vide, mais l'editext devient lent tout en tapant
Placez un linearlayout vide ci-dessous dans la liste de la liste en définissant une hauteur appropriée à la liste de liste. Placez une méthode OnClick () à cette disposition linéaire. Cela doit le faire. P>
a couru dans un problème similiaire où je devais fermer des éléments de liste étendus lorsque l'espace vide est cliqué. Voici comment je l'ai résolu.
public class CustomListView extends ListView { private OnNoItemClickListener mOnNoItemClickListener; public interface OnNoItemClickListener { void onNoItemClicked(); } public CustomListView(Context context) { super(context); Â } public CustomListView(Context context, AttributeSet attrs) { super(context, attrs); } public CustomListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { //check whether the touch hit any elements INCLUDING ListView footer if(pointToPosition((int) (ev.getX() * ev.getXPrecision()), (int) (ev.getY() * ev.getYPrecision())) == -1 && ev.getAction() == MotionEvent.ACTION_DOWN) { if(mOnNoItemClickListener != null) { mOnNoItemClickListener.onNoItemClicked(); } } return super.dispatchTouchEvent(ev); } public void setOnNoItemClickListener(OnNoItemClickListener listener) { mOnNoItemClickListener = listener; } }
Combinant certaines des autres réponses, j'ai monté cela qui fonctionne bien pour mon cas d'utilisation
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... setup list view and other view state listView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN && listView.pointToPosition((int) (event.getX() * event.getXPrecision()), (int) (event.getY() * event.getYPrecision())) == -1) { collapseExpandedListItem(); return true; } return false; } }); }
FWIW, j'ai déposé un problème pour obtenir le
SetonClickListener () code> restriction levé, car vous faites un excellent point: code.google.com/p/andrroid/issues/detetail?id=59559