Android: Přístup dítě pohledy z ListView

hlasů
103

Musím zjistit pozici pixelu jednoho prvku v seznamu, který byl zobrazen pomocí ListView. Vypadá to, že bych měl dostat jeden z TextView je a pak použít getTop(), ale nemohu přijít na to, jak se dostat dítě pohled ListView.

Aktualizace: děti z ViewGroupneodpovídají 1-to-1 s položkami v seznamu, pro A ListView. Místo toho, ViewGroup‚s dětmi, odpovídají pouze na ty názory, které jsou viditelné právě teď. Tak getChildAt()působí na indexu, který je vnitřní záležitostí ViewGroupa nemusí nutně mít co do činění s pozicí v seznamu, který se ListViewpoužívá.

Položena 02/11/2008 v 23:40
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
212

Viz: Android ListView: dostat index dat viditelné položky a kombinovat s částí odpovědi nohám lidové výše, vám může dát něco jako:

int wantedPosition = 10; // Whatever position you're looking for
int firstPosition = listView.getFirstVisiblePosition() - listView.getHeaderViewsCount(); // This is the same as child #0
int wantedChild = wantedPosition - firstPosition;
// Say, first visible position is 8, you want position 10, wantedChild will now be 2
// So that means your view is child #2 in the ViewGroup:
if (wantedChild < 0 || wantedChild >= listView.getChildCount()) {
  Log.w(TAG, "Unable to get view for desired position, because it's not being displayed on screen.");
  return;
}
// Could also check if wantedPosition is between listView.getFirstVisiblePosition() and listView.getLastVisiblePosition() instead.
View wantedView = listView.getChildAt(wantedChild);

Výhodou je, že nejste iterace nad dětmi v ListView, což by mohlo trvat hit výkonu.

Odpovězeno 21/04/2010 v 00:01
zdroj uživatelem

hlasů
17

Tento kód je jednodušší použít:

 View rowView = listView.getChildAt(viewIndex);//The item number in the List View
    if(rowView != null)
        {
           // Your code here
        }
Odpovězeno 01/01/2012 v 09:20
zdroj uživatelem

hlasů
6

Rychlé vyhledávání z dokumentů pro danou třídu ListView se objevil getChildCount () a getChildAt () zděděné z ViewGroup. Můžete přecházet mezi nimi pomocí nich? Nejsem si jistý, ale je to stojí za to vyzkoušet.

Našel jsem to tady

Odpovězeno 03/11/2008 v 00:04
zdroj uživatelem

hlasů
5
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

  @Override
public void onItemClick(AdapterView<?> parent, final View view, int position, long   id) 
{       
    View v; 
    int count = parent.getChildCount();
    v =parent.getChildAt(position);
    parent.requestChildFocus(v, view);  v.setBackground(res.getDrawable(R.drawable.transparent_button));
            for (int i=0; i<count; i++)
            {
                if (i!= position)
                {
                    v = parent.getChildAt(i);t  v.setBackground(res.getDrawable(R.drawable.not_clicked));

                }
            }
        }
    });

V podstatě, vytvořit dva obrazovkami - ten, který je transparentní, a druhý, který je požadovaná barva. Žádost o zaměření na kliknutého poloze (int pozice, jak je definován) a změnit barvu uvedeného řádku. Pak projít mateřské společnosti listview, a podle toho změní všechny ostatní řádky. To vysvětluje, když uživatel klikne na listviewvícekrát. To se provádí pomocí vlastního vzhledu pro každý řádek v listview. (Velmi jednoduchá, stačí nový layout soubor s textview- nenastavíte zaostřitelný nebo kliknout!) Nevyžaduje se žádná zakázku adapter - použití pole adapter

Odpovězeno 27/06/2013 v 14:54
zdroj uživatelem

hlasů
4
int position = 0;
listview.setItemChecked(position, true);
View wantedView = adapter.getView(position, null, listview);
Odpovězeno 29/01/2016 v 08:11
zdroj uživatelem

hlasů
-9

To předpokládá, že znáte pozici prvku v ListView:

  View element = listView.getListAdapter().getView(position, null, null);

Pak byste měli být schopni volat getLeft () a getTop () za účelem určení prvků na pozici obrazovky.

Odpovězeno 04/12/2008 v 15:08
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more