1.main.xml
- <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:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- tools:context=".MainActivity" >
- <ListView
- android:id="@+id/listview"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- </ListView>
- </RelativeLayout>
2.listitem.xml
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:descendantFocusability="blocksDescendants"
- android:orientation="horizontal" >
- <TextView
- android:id="@+id/textView1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="content"
- android:textColor="#ff0000"
- android:textSize="20sp" />
- <Button
- android:id="@+id/button1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:focusable="false"
- android:layout_alignParentRight="true"
- android:text="Button"
- android:textColor="#ff0000"
- android:textSize="20sp" />
- </RelativeLayout>
- package com.example.listviewchangetext;
- import java.util.List;
- import android.content.Context;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.Button;
- import android.widget.TextView;
- public class ContentAdapter extends BaseAdapter {
- private static final String TAG = "ContentAdapter";
- private List<String> mContentList;
- private LayoutInflater mInflater;
- private MyClickListener mListener;
- public ContentAdapter(Context context, List<String> contentList,//构造方法
- MyClickListener listener) {
- mContentList = contentList;
- mInflater = LayoutInflater.from(context);
- mListener = listener;
- }
- @Override
- public int getCount() {
- Log.i(TAG, "getCount");
- return mContentList.size();
- }
- @Override
- public Object getItem(int position) {
- Log.i(TAG, "getItem");
- return mContentList.get(position);
- }
- @Override
- public long getItemId(int position) {
- Log.i(TAG, "getItemId");
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- Log.i(TAG, "getView");
- ViewHolder holder = null;
- if (convertView == null) {
- convertView = mInflater.inflate(R.layout.listitem, null);
- holder = new ViewHolder();
- holder.textView = (TextView) convertView
- .findViewById(R.id.textView1);
- holder.button = (Button) convertView.findViewById(R.id.button1);
- convertView.setTag(holder);
- } else {
- holder = (ViewHolder) convertView.getTag();
- }
- holder.textView.setText(mContentList.get(position));
- holder.button.setOnClickListener(mListener);
- holder.button.setTag(position);
- return convertView;
- }
- public class ViewHolder {
- public TextView textView;
- public Button button;
- }
- /**
- * 用于回调的抽象类
- * @author Ivan Xu
- * 2014-11-26
- */
- public static abstract class MyClickListener implements OnClickListener {
- /**
- * 基类的onClick方法
- */
- @Override
- public void onClick(View v) {
- myOnClick((Integer) v.getTag(), v);
- }
- public abstract void myOnClick(int position, View v);
- }
- }
4.MainActivity.java
- package com.example.listviewchangetext;
- import java.util.ArrayList;
- import java.util.List;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.Menu;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.ListView;
- import android.widget.Toast;
- import com.example.listviewchangetext.ContentAdapter.MyClickListener;
- public class MainActivity extends Activity implements OnItemClickListener {
- // 模拟listview中加载的数据
- private static final String[] CONTENTS = { "北京", "上海", "广州", "深圳", "苏州",
- "南京", "武汉", "长沙", "杭州" };
- private List<String> contentList;
- private ListView mListView;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- init();
- }
- private void init() {
- mListView = (ListView) findViewById(R.id.listview);
- contentList = new ArrayList<String>();
- for (int i = 0; i < CONTENTS.length; i++) {
- contentList.add(CONTENTS[i]);
- }
- //实例化ContentAdapter类,并传入实现类
- mListView.setAdapter(new ContentAdapter(this, contentList, mListener));
- mListView.setOnItemClickListener(this);
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.main, menu);
- return true;
- }
- //响应item点击事件
- @Override
- public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
- Toast.makeText(this, "listview的item被点击了!,点击的位置是-->" + position,
- Toast.LENGTH_SHORT).show();
- }
- /**
- * 实现类,响应按钮点击事件
- */
- private MyClickListener mListener = new MyClickListener() {
- @Override
- public void myOnClick(int position, View v) {
- Toast.makeText(
- MainActivity.this,
- "listview的内部的按钮被点击了!,位置是-->" + position + ",内容是-->"
- + contentList.get(position), Toast.LENGTH_SHORT)
- .show();
- }
- };
- }