300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Android 自定义Adapter以实现自定义填充ListView的Item

Android 自定义Adapter以实现自定义填充ListView的Item

时间:2018-09-13 00:05:14

相关推荐

Android 自定义Adapter以实现自定义填充ListView的Item

1>实体类---即ListView中各个Item中填充的内容

package com..demo.cxc.entity;import java.text.SimpleDateFormat;import java.util.Date;/*** Created by CXC on 15/4/14.*/public class ToDoItem {private String task;private Date createdDate;//构造函数public ToDoItem(String task){this(task,new Date(java.lang.System.currentTimeMillis()));}public ToDoItem(String task,Date createdDate){this.task=task;this.createdDate=createdDate;}//getters && setterspublic String getTask() {return task;}public void setTask(String task) {this.task = task;}public Date getCreatedDate() {return createdDate;}public void setCreatedDate(Date createdDate) {this.createdDate = createdDate;}@Overridepublic String toString() {SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yy");String dateString =sdf.format(this.createdDate);return "("+dateString+") "+this.task;}}

2>自定义Adapter类

package com..demo.cxc.adapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.LinearLayout;import android.widget.TextView;import com.poundview.R;import com..demo.cxc.entity.ToDoItem;import org.w3c.dom.Text;import java.text.SimpleDateFormat;import java.util.List;/*** Created by CXC on 15/4/14.*/public class ToDoItemAdapter extends ArrayAdapter<ToDoItem> {private int resource_id;public ToDoItemAdapter(Context context, int resource_id, List<ToDoItem> items) {super(context, resource_id, items);this.resource_id = resource_id;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {LinearLayout todoView;ToDoItem toDoItem=getItem(position);if(convertView==null){//不是一次更新,则填充一个新视图todoView=new LinearLayout(getContext());LayoutInflater layoutInflater=(LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);layoutInflater.inflate(resource_id,todoView,true);}else {//否则更新该视图todoView=(LinearLayout)convertView;}//得到对象的各个属性值TextView task_tv=(TextView)todoView.findViewById(R.id.task_tv);TextView date_tv=(TextView)todoView.findViewById(R.id.date_tv);//填充该Item 中各个View的内容task_tv.setText(toDoItem.getTask());date_tv.setText(new SimpleDateFormat("dd/MM/yy").format(toDoItem.getCreatedDate()));return todoView;}}

3>MainActivity

3.1>布局

<LinearLayout xmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity"><LinearLayoutandroid:orientation="horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"><EditTextandroid:id="@+id/new_item_et"android:layout_width="0dp"android:layout_height="wrap_content"android:hint="Please input what to do ..."android:layout_weight="1"/><Buttonandroid:id="@+id/commit_bt"android:text="Ok"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout><ListViewandroid:id="@+id/todo_list"android:layout_width="match_parent"android:layout_height="wrap_content"></ListView></LinearLayout>

效果如图所示

3.2>代码如下

package com.poundview;import android.content.DialogInterface;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;import com..demo.cxc.adapter.ToDoItemAdapter;import com..demo.cxc.entity.ToDoItem;import java.util.ArrayList;import java.util.List;public class MainActivity extends ActionBarActivity implements View.OnClickListener {private EditText new_item_et;private Button commit_bt;private ListView todo_list;private List<ToDoItem> toDoItemList;private ToDoItemAdapter toDoItemAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initViews();}/*初始化控件,变量*/private void initViews() {new_item_et=(EditText)findViewById(R.id.new_item_et);commit_bt=(Button)findViewById(mit_bt);todo_list=(ListView)findViewById(R.id.todo_list);commit_bt.setOnClickListener(this);toDoItemList=new ArrayList<ToDoItem>();toDoItemAdapter=new ToDoItemAdapter(this,R.layout.todo_item,toDoItemList);//ListView注册Adaptertodo_list.setAdapter(toDoItemAdapter);}@Overrideprotected void onResume() {super.onResume();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();//noinspection SimplifiableIfStatementif (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}@Overridepublic void onClick(View v) {ToDoItem newItem=new ToDoItem(new_item_et.getText().toString());toDoItemList.add(0,newItem);toDoItemAdapter.notifyDataSetChanged();}}

其中ListView中的每一个Item的布局todo_item.xml

如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid:id="@+id/task_tv"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"/><TextViewandroid:id="@+id/date_tv"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。