listview这个组件很常用而且很好用,基本每个APP都有,我们常常设计是这个listview需要点击然后弹出dialog,或者另外的activity都有,具体就是看需求。不多说直接看代码上图
package com.nian.preferential.smenu; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.GridView; import android.widget.ListView; import android.widget.TextView; import com.nian.preferential.HomeActivity; import com.nian.preferential.R;
/** * * * @author zouyinglong * */
public class ChooseCity extends Activity { private static final String TAG = "ChooseCity"; TextView topText; Intent gIntent; ListView listView; LayoutInflater inflater; View headView; Button headItemBut; ChooseAdapter coAdapter; String DATA[][] = new String [][] {//listview显示的数据,但是在开发过程中数据一般来自接口
//接受后台的数据,所以常常会调用json的方法,一般会用到异步机制AsyncTask,这里就不解释了。这几个城市
//不多我就直接写出来
/*eg A , 地区*/ {"B","北京"}, {"C","成都","重庆","长春","长沙","常州"}, {"D","大连"}, {"F","福州"}, {"G","广州","贵阳"}, {"H","杭州","哈尔滨","合肥","海口"}, {"J","济南"}, {"K","昆明"}, {"L","兰州"}, {"N","南京","南昌","宁波","南宁"}, {"Q","青岛"}, {"S","上海","深圳","沈阳","苏州","石家庄"}, {"T","天津","太原"}, {"W","武汉","无锡","温州"}, {"X","西安","厦门"}, {"Y","烟台","扬州"}, {"Z","珠海","郑州"}, }; @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.choose_city);//导入xml文件
initResourceRefs();//分别执行这2个方法,只是这2个方法代替了initview
initSettings();
//如果是用异步获取listview里面的数据,这就要初始化searchAsyncTask("", "", true);
//后面你就要写上这个方法private void searchAsyncTask(final CityEntity XXXX){
// new AsyncTask
} private void initResourceRefs(){ topText = (TextView)findViewById(R.id.choose_top_tital); listView = (ListView)findViewById(R.id.choose_city); gIntent = getIntent(); inflater = LayoutInflater.from(this);//LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()
headView = inflater.inflate(R.layout.choose_city_headview, null);//去加载找到在这个xml
headItemBut = (Button)headView.findViewById(R.id.choose_headview_but); coAdapter = new ChooseAdapter();//调用适配器,所谓适配器就是你的activity的数据怎么合适
/恰当的且刚好匹配的显示在你的xml上
}
private void initSettings(){
final String city = gIntent.getStringExtra("NowCity");//通过intent带来的数据,我获//取到这里
topText.setText(getString(R.string.choose_city_text, city)); listView.addHeaderView(headView); headItemBut.setText(getString(R.string.choose_current_city, getString(R.string.home_location_default)/*完成定位系统后切换*/)); listView.setAdapter(coAdapter); headView.setClickable(true); headView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {//点击的方法事件
Intent intent = new Intent(ChooseCity.this ,HomeActivity.class); ChooseCity.this.setResult(RESULT_CANCELED);; ChooseCity.this.finish(); } }); } @Override protected void onDestroy() { // 退出的时候 返回一个值 setResult(RESULT_CANCELED); super.onDestroy(); } // listView 的 adapter private class ChooseAdapter extends BaseAdapter{//这里写上适配器,适配器无非就3+1,3种
//我们已知,另外的1种一般就是我们自定义的,用多了常常是自定义适配器,但一定要继承BaseAdapter
@Override public int getCount() { // TODO Auto-generated method stub return DATA.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) {
//这是写适配器最重要的方法,你数据怎么显示在xml都是在这个方法里处理
ChooseCityListItem item ; if(convertView == null){//view的数据放到convertview中,这里convertview就
//你listview放的数据item
item = new ChooseCityListItem(ChooseCity.this); convertView = item.getView(); convertView.setTag(item);//去取你这里的item
}else{
item =(ChooseCityListItem)convertView.getTag();//getTag相当于你数据都放到这个
//gettag()方法里了
} item.bind(getData(position)); return convertView; } public String[] getData(int position){ String []a = new String[DATA[position].length];; for(int i=0 ;i<DATA[position].length ;i++){ a[i]=DATA[position][i]; } return a; } } /** * * item */ public class ChooseCityListItem { public static final String TAG = "ChooseCityListItem"; private Context mContext; private String[] mData; private TextView text; private GridView grid; ChooseItemAdapter ciAdapter; View mView; public ChooseCityListItem(Context context) { mContext = context; init(); } public View getView(){ return mView; } public void bind(String[]data){ mData = data; if(ciAdapter == null){ ciAdapter = new ChooseItemAdapter(); grid.setAdapter(ciAdapter); }else{ ciAdapter.notifyDataSetChanged(); } text.setText(mData[0]); } public void init(){ LayoutInflater inflater = LayoutInflater.from(mContext); mView =inflater.inflate(R.layout.choose_city_list_item, null); text = (TextView)mView.findViewById(R.id.choose_list_item_text); grid = (GridView)mView.findViewById(R.id.choose_list_item_grid); } // listView 中的 GridView 的 adapter private class ChooseItemAdapter extends BaseAdapter{ @Override public int getCount() { // TODO Auto-generated method stub return mData.length-1; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position+1; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position+1; } @Override public View getView(int position, View convertView, ViewGroup parent) { final TextView text ; if(convertView == null){ text = new TextView(mContext); text.setTextColor(Color.BLACK); text.setGravity(Gravity.CENTER_HORIZONTAL); text.setTextSize(20); text.setClickable(true); text.setOnClickListener(new TextView.OnClickListener() { @Override public void onClick(View v) { String city= text.getText().toString(); Intent intent = new Intent(ChooseCity.this ,HomeActivity.class); intent.putExtra("Choose_city", city); ChooseCity.this.setResult(RESULT_OK, intent); ChooseCity.this.finish(); } }); }else{ text = (TextView)convertView ; } text.setText(mData[position+1]); return text; } private void setTextSeting(){ } } } }
xml
<?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" android:background="@color/back_color" > <TextView android:id="@+id/choose_top_tital" android:layout_width="fill_parent" android:layout_height="wrap_content" style="@style/top_text_style" android:text="@string/home_location_default" /> <ListView android:id="@+id/choose_city" android:layout_width="fill_parent" android:layout_height="0.0dip" android:layout_weight="1.0" android:cacheColorHint="#00000000" android:scrollbars="@null" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/bg_city1" android:text="@string/choose_citys_more" android:gravity="center" android:textSize="15sp" /> </LinearLayout>