Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android編程入門 >> android_ListView

android_ListView

編輯:Android編程入門

Day1

今天看了listView,並對簡單的列表選擇進行了實現。

首先明確一下適配器的概念,就我個人理解而言,就是連接layout.xml和Activity.java的橋梁。在xml中定義一個listView,在Java中創建一個數組,數組用於創建adapter(這裡adapter也可以理解成數據源的樣子),然後add到listView上。

按適配器分,listView可以分為ArrayAdapter,SimpleAdapter,SimpleCusorAdapter和自定義Adapter。

根據我學習的書本,今天實現了ArrayAdapter和自定義Adapter。

ArrayAdapter:構成listView數據項的就是簡單的數組

在xml:簡單的拖曳textView和listView,給他們定義id.

在java:創建數組,創建適配器(調用數組),給listView添加適配器。

          為了使效果更加明顯,給listView添加OnItemClick方法,實現OnCLick方法,獲取到它的ToString值,賦給TextView,這樣就能很直觀的體現出來了。

其中listView又可以實現 單選和多選 兩種模式,改一下Adapter的layout和listView的choiceMode就可以.

按照書上的跑了一遍例子,代碼如下:

 public class ListView1 extends ActionBarActivity {
 
     private TextView textView;
     private TextView txtContent;
     private ListView listView;
     private Button button;
     int count =0;
     String [] Balls = new String[]{"basketball","soccer","baseball","籃球","足球","排球"};
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_list_view1);
         txtContent =(TextView)findViewById(R.id.textView);
         textView =(TextView)findViewById(R.id.textView2);
         listView = (ListView)findViewById(R.id.listView);
         button = (Button)findViewById(R.id.button);
        //單選
        // ArrayAdapter<String>adapterBalls = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,Balls);
        //多選
         ArrayAdapter<String>adapterBalls = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,Balls);
         listView.setAdapter(adapterBalls);
         listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);//可多選
         count = adapterBalls.getCount();
         button.setOnClickListener(btnListener);
 
         listView.setOnItemClickListener(lstListener);
         listView.setTextFilterEnabled(true);
         listView.setSelector(R.drawable.tar);
         listView.setSelection(3);
     }
     private ListView.OnItemClickListener lstListener = new ListView.OnItemClickListener(){
         public void onItemClick(AdapterView<?>parent,View v,int position,long id){
          //單選
          // String sel = parent.getItemAtPosition(position).toString();
          // textView.setText("我最喜歡的球類運動:"+sel);
             if(listView.isItemChecked(position)){
                 String sel = parent.getItemAtPosition(position).toString();//parents??? position是指選項的位置。
                 txtContent.setText("目前選擇:"+sel);
             }else{
                 txtContent.setText("目前選擇:");
             }
         }
     };
 
     private Button.OnClickListener btnListener = new Button.OnClickListener(){
         public void onClick(View v){
             String selAll = "";
             for(int i=0;i<count;i++){
                 if(listView.isItemChecked(i)) {//已復選
                     selAll +=Balls[i];
                 }
             }
             textView.setText(selAll);
         }
     };
 }

 

 

自定義Adapter:構成listView數據項的是由自己定義的,類似結構體。

就是比如你的listView中的每一個選項都需要一張圖片,一行簡介和一個按鈕。

那你最好自己自定義一個layout,裡面有你想設計成的item的樣式,再在Java中重寫適配器,因為要達到一種效果就是new 適配器的時候,要把item裡面的所有元素都初始化好。

在xml:一個是本來就有的xml,裡面就有textView和ListView,另一個額外的xml是你自己設定的item的樣式。

在java:按照普通的listView來實現,然後在onCreat()方法下面新建一個內部類myAdapter,繼承自BaseAdapter,主要實現他的getView功能就OK。

 package com.example.administrator.myapplication;
 
 import android.content.Context;
 import android.support.v7.app.ActionBarActivity;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.TextView;
 /*
 自定義list列表
 自定義list的item的布局 my_adaoter.xml
 自定義適配器MyAdapter 內部類
  */
 
 public class ListView2 extends ActionBarActivity {
 
     private TextView txtName;
     private ListView listName;
     int [] resIds = new int[]{R.drawable.tar,R.drawable.serach};
     String []Balls = new String[]{"星星","搜索"};
     String []engNames = new String[]{"star","search"};
     MyAdapter adapter = null;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_list_view2);
         txtName = (TextView)findViewById(R.id.textView3);
         listName = (ListView)findViewById(R.id.listView2);
         adapter=new MyAdapter(this);
         listName.setAdapter(adapter);
     }
 
     public class MyAdapter extends BaseAdapter {
         private LayoutInflater myInflater;
         public MyAdapter(Context c){
             myInflater=LayoutInflater.from(c);
         }
         public int getCount(){
             return Balls.length;
         }
         public Object getItem(int position){
             return Balls[position];
         }
         public long getItemId(int position){
             return position;
         }
         public View getView(int position,View convertView,ViewGroup parent){
             convertView=myInflater.inflate(R.layout.activity_my_adapter,null);
             //獲取myadapter.xml中的組件
             ImageView imgLogo = (ImageView)convertView.findViewById(R.id.imageView);
             TextView txtName = (TextView)convertView.findViewById(R.id.txtName);
             TextView txtEngName = (TextView)convertView.findViewById(R.id.txtEngName);
             //設置組件內容
             imgLogo.setImageResource(resIds[position]);
             txtName.setText(Balls[position]);
             txtEngName.setText(engNames[position]);
 
             return convertView;
         }
     }
 
 }

 

THE  ENDDING......

1.敲代碼的時候打listView.後面就會出現好多的方法,覺得最好的學習還是要看一下API之類的官方文檔,學習掌握更加全面。

2.現在過第一遍的確是理解了,但這個東西吧,特別容易忘,幾天不上手就容易記憶模糊,需要在記憶方面下點苦功。多嘗試不借助外力,徒手實現代碼。

3.關於SimpleAdapter,SimpleCusorAdapter,內容和思想也和上述的Adapter也大致相同吧,下次補上。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved