2012-10-30 16 views
13

Esiste un tag XML che posso utilizzare in un file di layout equivalente a ListView.addHeaderView()?Esiste un tag XML equivalente a `ListView.addHeaderView '?

+0

penso che non è esiste in visualizzazione elenco originale. Una possibile soluzione è estendere 'ListView' e creare attributi personalizzati per impostare la vista dell'intestazione. –

+0

@ Yul Posso creare attributi personalizzati che possono essere utilizzati in un file di layout XML? Dovrò approfondire ulteriormente ... –

+1

[** Qui **] (http://kevindion.com/2011/01/custom-xml-attributes-for-android-widgets/) amico –

risposta

18

Ho scritto un semplice ListView come il vostro requisito.

  1. Declare attributo personalizzato in attrs.xml nella cartella value:

    <resources> 
        <declare-styleable name="HeaderListViewFromXML"> 
         <attr name="headerView" format="reference"/> 
        </declare-styleable> 
    </resources> 
    
  2. Creare HeaderListViewFromXML classe estesa ListView

    public class HeaderListViewFromXML extends ListView { 
        private int headerId; 
    
        public HeaderListViewFromXML(Context context) { 
         this(context, null); 
        } 
    
        public HeaderListViewFromXML(Context context, AttributeSet attrs) { 
         this(context, attrs, 0); 
        } 
    
        public HeaderListViewFromXML(Context context, AttributeSet attrs, int defStyle) { 
         super(context, attrs, defStyle); 
         TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.HeaderListViewFromXML, defStyle, defStyle); 
    
         try { 
          headerId = a.getResourceId(R.styleable.HeaderListViewFromXML_headerView, View.NO_ID); 
          if (headerId != View.NO_ID) { 
           LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
           View header = inflater.inflate(headerId, null); 
           addHeaderView(header); 
          } 
         } finally { 
          a.recycle(); 
         } 
        } 
    } 
    
  3. Dichiarare personalizzato HeaderListViewFromXML in layout.xml

    <RelativeLayout 
         xmlns:android="http://schemas.android.com/apk/res/android" 
         xmlns:app="http://schemas.android.com/apk/res-auto" 
         android:layout_width="match_parent" 
         android:layout_height="match_parent"> 
        <com.example.rewidget.HeaderListViewFromXML 
          android:id="@+id/listWithHeader" 
          android:layout_width="fill_parent" 
          android:layout_height="150dp" 
          android:layout_marginTop="60dp" 
          android:background="#00FF00" 
          // custom attribute. Point to layout in header1.xml 
          app:headerView="@layout/header1" /> 
    </RelativeLayout> 
    
  4. In Attività, utilizzare come normale ListView

    public class MainActivity extends Activity { 
        @Override 
        public void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.activity_main); 
         ListView list = (ListView) findViewById(R.id.listWithHeader); 
    
         String[] values = new String[] { "Android", "iPhone", "WindowsMobile", "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2" }; 
         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values); 
    
         list.setAdapter(adapter); 
        } 
    } 
    
+0

Nifty! Grazie per il post. –

Problemi correlati