您的位置:首页 > 移动开发 > Android开发

自定义adapter的listview

2016-07-20 09:29 435 查看
1'在activity中,对应的xml,一个简单的list view


<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:paddingTop="30dp"

    android:paddingLeft="10dp"

    android:paddingRight="10dp"

    android:background="#efe8e2"    

android:clipToPadding="false"  

android:fitsSystemWindows="true" 
>

   <ListView
android:id="@+id/date_list"

    android:dividerHeight="1dp"

    android:divider="#00000000"

        android:layout_width="fill_parent"  

        android:layout_height="fill_parent">

    </ListView>

    

</RelativeLayout>

2'在对应的activity中


package com.example.androidlisttest;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class AddTimingChooseDateActivity extends Activity {

private static ListView
listView;

public
static Context context;

public
static String repeateDate;

private TextView
action_middle_textView;

private Button
action_left_button,action_right_button;

protected void onCreate(Bundle savedInstanceState){

String dates = null;

//自定义了下action bar
final android.app.ActionBar actionBar = getActionBar();
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setCustomView(R.layout.custom_actionbar);

action_middle_textView = (TextView)this.findViewById(R.id.middle_text_view);
action_left_button = (Button)this.findViewById(R.id.left_button);
action_right_button = (Button)this.findViewById(R.id.right_button);

action_left_button.setBackgroundResource(R.drawable.back_button);

action_middle_textView.setText("选择重复");
action_left_button.setOnClickListener(new View.OnClickListener() {
//返回
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub

AddTimingChooseDateActivity.this.finish();
}
});

//设置加载的xml文件
setContentView(R.layout.add_timing_date_list);

//加载listview
listView = (ListView)findViewById(R.id.date_list);

List<HashMap<String,Object>> list = getData(dates);
//设置自定义的adapter
listView.setAdapter(new AddTimingDateAdapter(context,list));

super.onCreate(savedInstanceState);
}

//加载解析数据(自己的理解和叫法)
public static List<HashMap<String,Object>> getData(String retjson){
List<HashMap<String,Object>>list = new ArrayList<HashMap<String,Object>>();

   String[] dateArray = repeateDate.split("[ ]"); 

for(int i=0;i<7;i++){

HashMap<String,Object> map = new HashMap<String,Object>();
switch (i){

case 0:
map.put("date", "每周日");
if(Arrays.asList(dateArray).contains("周日")){
map.put("image", R.drawable.choose_date_selected);

}else{
map.put("image", R.drawable.choose_date_noselected);

}

break;
case 1:
map.put("date", "每周一");
if(Arrays.asList(dateArray).contains("周一")){
map.put("image", R.drawable.choose_date_selected);

}else{
map.put("image", R.drawable.choose_date_noselected);

}
break;
case 2:
map.put("date", "每周二");
if(Arrays.asList(dateArray).contains("周二")){
map.put("image", R.drawable.choose_date_selected);

}else{
map.put("image", R.drawable.choose_date_noselected);
}

break;
case 3:
map.put("date", "每周三");
if(Arrays.asList(dateArray).contains("周三")){
map.put("image", R.drawable.choose_date_selected);

}else{
map.put("image", R.drawable.choose_date_noselected);
}

break;
case 4:
map.put("date", "每周四");
if(Arrays.asList(dateArray).contains("周四")){
map.put("image", R.drawable.choose_date_selected);

}else{
map.put("image", R.drawable.choose_date_noselected);
}

break;
case 5:
map.put("date", "每周五");
if(Arrays.asList(dateArray).contains("周五")){
map.put("image", R.drawable.choose_date_selected);

}else{
map.put("image", R.drawable.choose_date_noselected);

}

break;
case 6:
map.put("date", "每周六");
if(Arrays.asList(dateArray).contains("周六")){
map.put("image", R.drawable.choose_date_selected);

}else{
map.put("image", R.drawable.choose_date_noselected);

}

break;

default:
break;

}

list.add(map);
}

return list;
}

}

3'自定义的adapter对应的xml文件



<?xml
version="1.0"
encoding="utf-8"?>  

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"
android:layout_width="fill_parent"

    android:layout_height="42dp"
android:minHeight="42dp"
android:background="#ffffff">

    

    <LinearLayout
android:layout_width="match_parent"  

        android:layout_height="wrap_content"         

    android:layout_marginTop="0px"

        android:orientation="vertical">

    

    <LinearLayout
android:orientation="horizontal"

        android:layout_width="match_parent"

        android:layout_height="40dp">

        

        <TextView
android:id="@+id/choose_date"

            android:layout_width =
"150dp"

            android:layout_height =
"30dp"

            android:layout_marginLeft =
"10dp"

            android:layout_marginTop =
"15dp"

            android:textColor =
"#666872"

            android:textSize =
"30px"/>

        

      <ImageView
android:id="@+id/choose_image_view"

       android:layout_width="30dp"

       android:layout_height="30dp"

       android:layout_marginTop =
"5dp"

       android:background="@drawable/line"

      android:layout_marginLeft="110dp"
/>

        

    </LinearLayout>    

    

  </LinearLayout>

 

    <Button
android:id="@+id/top_button"

        android:layout_width="match_parent" 

        android:layout_height="match_parent"

android:orientation="vertical"

android:background="#00FFFFFF"

>

    </Button>

    

    

  </RelativeLayout>

左边一个textview右边一个图片,上边一个button

4'自定义的adapter代码


package com.example.androidlisttest;

import java.util.HashMap;
import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class AddTimingDateAdapter extends BaseAdapter {

public static List<HashMap<String,Object>>data;
private LayoutInflater layoutInflater;
private Context context;

public AddTimingDateAdapter(Context context, List<HashMap<String,Object>>data){
this.context = context;
this.data = data;
this.layoutInflater = layoutInflater.from(context);
}

public final class Fujian{//自定义一个zujian 来管理adapter的控件及属性
public ImageView chooseDateImage;
public TextView chooseDate;
public Button topButton;
public Boolean mode = false;
public int position;
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}

@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return data.get(arg0);
}

@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub

Zujian zujian = null;

if(convertView == null){

zujian = new Zujian();
 //加载对应的xml文件,并获取到其中对应的控件
convertView = layoutInflater.from(context).inflate(R.layout.add_timing_date, null);
zujian.chooseDate = (TextView)convertView.findViewById(R.id.choose_date);
zujian.chooseDateImage = (ImageView)convertView.findViewById(R.id.choose_image_view);
zujian.topButton = (Button)convertView.findViewById(R.id.top_button);
}
//设置数据
zujian.chooseDate.setText((String) data.get(position).get("date"));
zujian.chooseDateImage.setBackgroundResource((Integer)data.get(position).get("image"));
zujian.position = position;
//添加点击事件
zujian.topButton.setTag(zujian);
zujian.topButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub

Zujian zj = (Zujian) (arg0.getTag());

if(zj.mode){
zj.mode = false;
zj.chooseDateImage.setImageResource(R.drawable.choose_date_noselected);
rp[zj.position] = 0;
}else{
zj.mode = true;
zj.chooseDateImage.setImageResource(R.drawable.choose_date_selected);
rp[zj.position] = 1;
}

}

});

return convertView;
}

}

总结下:一个自定义adapter的listview,首先在activity中,也就是页面中,要在对应的xml写一个listview的布局文件,用来加载这个listview,然后就是在activity中要去加载,并且用类似于public static List<HashMap<String,Object>> getData(String
retjson)函数给其自定义的adapter传递数据。然后在自定义的adapter中首先在xml文件中定义每一行的布局,然后在adapter中加载这个布局文件,并且做一些列表多少个等的操作。最重要的就是

public View getView(int position, View convertView, ViewGroup parent)这个函数,来返回每一行的内容,在这里什么复用,什么显示数据等等,都是在这操作的。

ps:现在看android不到一个星期,所以理解错误之处请多多指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息