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