編輯: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也大致相同吧,下次補上。
Android 活動(Activity)活動代表了一個具有用戶界面的單一屏幕,如 Java 的窗口或者幀。Android 的活動是 ContextThem
最全面的Android Studio使用教程 Android Studio是一套面世時間還不長的IDE(即集成開發環境),目前已經免費向谷歌及Android的開
Android 意圖(Intent)和過濾器(Filter)Android意圖是一個要執行的操作的抽象描述。它可以通過 startActivity 來啟動
---恢復內容開始---因為android的UI線程是不安全的,如果你UI線程裡執行一些耗時任務,很容易就導致程序崩潰。並且目前網絡任務也不能夠在UI線程裡執行。處理這些