Heim  >  Artikel  >  Java  >  Benutzerdefinierte Android-ListView

Benutzerdefinierte Android-ListView

高洛峰
高洛峰Original
2016-12-13 17:01:031266Durchsuche

In diesem Artikel geht es um die Implementierung eines benutzerdefinierten Listen-Android-Programms. Das Programm implementiert eine ListView, die einen benutzerdefinierten Adapter zum Binden von
Daten und zum Binden von Daten mit Schaltflächen über contextView.setTag verwendet.
Wenn das System eine Liste (ListView) anzeigt, wird zunächst ein Adapter instanziiert. In diesem Artikel wird ein benutzerdefinierter Adapter instanziiert. Um
einen benutzerdefinierten Adapter zu implementieren, müssen Sie die Daten manuell zuordnen. In diesem Fall müssen Sie die Methode getView() überschreiben. Das System
ruft diese Methode auf, wenn jede Zeile der Liste gezeichnet wird.
Wenn die ListView mit dem Zeichnen beginnt, ruft das System automatisch die Funktion getCount() auf und ermittelt die Länge der ListView basierend auf dem von der Funktion zurückgegebenen Wert.
Dann ruft es basierend auf dieser Länge getView() auf Zeichnen Sie jede Linie einzeln.
Sie können sich für die spezifische Verwendung auf den folgenden Code beziehen. Denken Sie einfach an die drei Schritte zum Anpassen von ListView in Android:
Schritt 1: Hauptlayoutdateien, Komponentenlayoutdateien usw. vorbereiten.
Schritt 2: Erhalten und Daten organisieren
Teil 3: Daten binden, hier schreiben wir die Adapterklasse selbst
1. Erstellen Sie zunächst eine neue Liste.XML

Java-Code

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:orientation="vertical" >  
    <LinearLayout android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:orientation="horizontal" android:background="#f1e4f1">  
        <ImageView   
            android:id="@+id/image"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"/>  
        <TextView   
            android:id="@+id/title"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:textColor="#666872"/>  
        <Button   
            android:id="@+id/view"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="详细"/>  
    </LinearLayout>  
    <TextView   
        android:id="@+id/info"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:textColor="#666872"/>  
</LinearLayout>

2. Erstellen Sie eine neue Adapterklasse MyAdspter.java

Java-Code

public class MyAdspter extends BaseAdapter {  
  
    private List<Map<String, Object>> data;  
    private LayoutInflater layoutInflater;  
    private Context context;  
    public MyAdspter(Context context,List<Map<String, Object>> data){  
        this.context=context;  
        this.data=data;  
        this.layoutInflater=LayoutInflater.from(context);  
    }  
    /** 
     * 组件集合,对应list.xml中的控件 
     * @author Administrator 
     */  
    public final class Zujian{  
        public ImageView image;  
        public TextView title;  
        public Button view;  
        public TextView info;  
    }  
    @Override  
    public int getCount() {  
        return data.size();  
    }  
    /** 
     * 获得某一位置的数据 
     */  
    @Override  
    public Object getItem(int position) {  
        return data.get(position);  
    }  
    /** 
     * 获得唯一标识 
     */  
    @Override  
    public long getItemId(int position) {  
        return position;  
    }  
  
    @Override  
    public View getView(int position, View convertView, ViewGroup parent) {  
        Zujian zujian=null;  
        if(convertView==null){  
            zujian=new Zujian();  
            //获得组件,实例化组件  
            convertView=layoutInflater.inflate(R.layout.list, null);  
            zujian.image=(ImageView)convertView.findViewById(R.id.image);  
            zujian.title=(TextView)convertView.findViewById(R.id.title);  
            zujian.view=(Button)convertView.findViewById(R.id.view);  
            zujian.info=(TextView)convertView.findViewById(R.id.info);  
            convertView.setTag(zujian);  
        }else{  
            zujian=(Zujian)convertView.getTag();  
        }  
        //绑定数据  
        zujian.image.setBackgroundResource((Integer)data.get(position).get("image"));  
        zujian.title.setText((String)data.get(position).get("title"));  
        zujian.info.setText((String)data.get(position).get("info"));  
        return convertView;  
    }  
  
}

Zur Verwendung von LayoutInflater oben: Die LayoutInflater-Klasse ist in der tatsächlichen Entwicklung immer noch sehr nützlich. Seine Funktion ähnelt findViewById(). Der Unterschied besteht darin, dass LayoutInflater zum Suchen der XML-Layoutdatei unter dem Layout verwendet wird und instanziiert wird! .
Die drei Parameter von getView(): position gibt an, welche Zeile angezeigt wird, covertView ist das aus der Layoutdatei aufgeblasene Layout
. Wir verwenden die Methode LayoutInflater, um die definierte list.xml-Datei zur Anzeige in eine View-Instanz zu extrahieren. Instanziieren Sie dann jede Komponente in der XML-Datei
, damit die Daten jeder Komponente zugeordnet werden können. Um jedoch auf das Klickereignis zu reagieren, muss die Schaltfläche einen Klick-Listener zu
hinzufügen, damit das Klickereignis erfasst werden kann.
3. ListView-Steuerelement in Activity_main.xml hinzufügen

Java-Code

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:paddingBottom="@dimen/activity_vertical_margin"  
    android:paddingLeft="@dimen/activity_horizontal_margin"  
    android:paddingRight="@dimen/activity_horizontal_margin"  
    android:paddingTop="@dimen/activity_vertical_margin"  
    tools:context=".MainActivity" >  
    <ListView   
        android:id="@+id/list"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"></ListView>  
</RelativeLayout>
4. ListView in Aktivität


Java-Code aufrufen

public class MainActivity extends Activity {  
  
    private ListView listView=null;   
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        listView=(ListView)findViewById(R.id.list);  
        List<Map<String, Object>> list=getData();  
        listView.setAdapter(new MyAdspter(this, list));  
    }  
    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        getMenuInflater().inflate(R.menu.main, menu);  
        return true;  
    }  
  
    public List<Map<String, Object>> getData(){  
        List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();  
        for (int i = 0; i < 10; i++) {  
            Map<String, Object> map=new HashMap<String, Object>();  
            map.put("image", R.drawable.ic_launcher);  
            map.put("title", "这是一个标题"+i);  
            map.put("info", "这是一个详细信息"+i);  
            list.add(map);  
        }  
        return list;  
    }  
}


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn