listview当条目中有按钮的点击事件

1.对item中的点击事件,可以定义接口来监听,先写一个接口类

package com.example.listviewbuttonclick.adapter.inter;

import android.view.View;

public interface InterClick {
	public void commentClick(View v);
	public void shareClick(View v);
	public void animClick(View v);
}


2.listview的适配器adapter类;

package com.example.listviewbuttonclick.adapter;

import java.util.List;

import com.example.listviewbuttonclick.R;
import com.example.listviewbuttonclick.adapter.inter.InterClick;

import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
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.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class ContentAdapter extends BaseAdapter implements OnClickListener {

	private static final String TAG = "ContentAdapter";
	private List<String> mContentList;
	private LayoutInflater mInflater;
	private InterClick mCallback;
	private boolean isplaying;
	private boolean isSameItem;
	private int mPosition;

	public ContentAdapter(Context context, List<String> contentList,
<span style="white-space:pre">			</span>boolean isplaying, boolean isSameItem, int mPosition, InterClick callback) {
<span style="white-space:pre">		</span>this.mContentList = contentList;
<span style="white-space:pre">		</span>this.mInflater = LayoutInflater.from(context);
<span style="white-space:pre">		</span>this.mCallback = callback;
<span style="white-space:pre">		</span>this.isplaying = isplaying;
<span style="white-space:pre">		</span>this.isSameItem = isSameItem;
<span style="white-space:pre">		</span>this.mPosition = mPosition;
<span style="white-space:pre">	</span>}

	@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.list_item, null);
			holder = new ViewHolder();
			holder.textView = (TextView) convertView.findViewById(R.id.textView1);
			holder.button1 = (Button) convertView.findViewById(R.id.button1);
			holder.button2 = (Button) convertView.findViewById(R.id.button2);
			holder.ll_voice_play = (LinearLayout) convertView.findViewById(R.id.ll_voice_play);
			holder.iv_voice_image_anim = (ImageView) convertView.findViewById(R.id.iv_voice_image_anim);
			holder.iv_voice_image = (ImageView) convertView.findViewById(R.id.iv_voice_image);

			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}
		
		AnimationDrawable animationDrawable = (AnimationDrawable) holder.iv_voice_image_anim.getBackground();
		
		if (position == mPosition) {
			System.out.println("点击的条目======"+position);
			if (isSameItem) {
				if (isplaying) {
					holder.iv_voice_image.setVisibility(View.GONE);
					holder.iv_voice_image_anim.setVisibility(View.VISIBLE);
					animationDrawable.start();
				} else {
					holder.iv_voice_image_anim.setVisibility(View.GONE);
					holder.iv_voice_image.setVisibility(View.VISIBLE);
					animationDrawable.stop();
				}
			}else {
				animationDrawable.start();
				holder.iv_voice_image_anim.setVisibility(View.VISIBLE);
				holder.iv_voice_image.setVisibility(View.GONE);
			}
			
		}else {
			System.out.println("其它条目--------"+position);
			animationDrawable.stop();
			holder.iv_voice_image_anim.setVisibility(View.GONE);
			holder.iv_voice_image.setVisibility(View.VISIBLE);
		}
		
		holder.textView.setText(mContentList.get(position));
		holder.button1.setOnClickListener(this);
		holder.button2.setOnClickListener(this);
		holder.ll_voice_play.setOnClickListener(this);

		// 设置位置,获取点击的条目按钮
		holder.button1.setTag(position);
		holder.button2.setTag(position);
		holder.ll_voice_play.setTag(position);
		
		return convertView;
	}

	public class ViewHolder {
		public TextView textView;
		public Button button1;
		public Button button2;
		public LinearLayout ll_voice_play;
		public ImageView iv_voice_image_anim;
		public ImageView iv_voice_image;
	}

	// 响应按钮点击事件,调用子定义接口,并传入View
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.button1:
			mCallback.commentClick(v);
			break;
		case R.id.button2:
			mCallback.shareClick(v);
			break;
		case R.id.ll_voice_play:
			mCallback.animClick(v);
			break;
		default:
			break;
		}
	}
	public void refreshPersonContactsAdapter(int mPosition, boolean isplaying, boolean isSameItem) { 
		this.mPosition = mPosition;
		this.isplaying = isplaying;
		this.isSameItem = isSameItem;
        notifyDataSetChanged(); 
    }
}

在条目的布局中定义了两个按钮,和一个可点击的布局来播放帧动画。

条目的布局文件:

<?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="wrap_content"
	android:descendantFocusability="blocksDescendants"
	android:orientation="vertical" >

	<TextView
		android:id="@+id/textView1"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:text="content"
		android:textColor="#ff0000"
		android:textSize="20sp" />

	<LinearLayout
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:orientation="horizontal" >

		<Button
			android:id="@+id/button1"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:focusable="false"
			android:text="评论"
			android:textColor="#ff0000"
			android:textSize="20sp" />

		<Button
			android:id="@+id/button2"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:focusable="false"
			android:text="分享"
			android:textColor="#ff0000"
			android:textSize="20sp" />
		
		<LinearLayout
            android:id="@+id/ll_voice_play"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/tv_member_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="张星星"
                android:textColor="#a0a0a0"
                android:textSize="14dp"
                android:textStyle="normal" />

            <RelativeLayout
            android:id="@+id/rl_voice_play"
            android:visibility="visible"
            android:layout_width="80dp"
            android:layout_height="34dp"
            android:focusable="false"
            android:background="@drawable/selector_voice_history_bg"
            >

        <ImageView
                android:id="@+id/iv_voice_image_anim"
                android:layout_width="15dp"
                android:layout_height="20dp"
                android:background="@anim/voice_history_play_anim"
                android:layout_centerVertical="true"
                android:layout_marginLeft="18dp"
                android:visibility="gone"
                />

        <ImageView
            android:id="@+id/iv_voice_image"
            android:layout_width="15dp"
            android:layout_height="20dp"
            android:layout_centerVertical="true"
            android:layout_marginLeft="18dp"
            android:background="@drawable/sound_item"
            android:visibility="visible" />

    </RelativeLayout>
            
        </LinearLayout>
	</LinearLayout>

</LinearLayout>

3.在页面中为listview设置adapter即可;

package com.example.listviewbuttonclick;

import java.util.ArrayList;

import java.util.List;

import com.example.listviewbuttonclick.adapter.ContentAdapter;
import com.example.listviewbuttonclick.adapter.inter.InterClick;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;

//MainActivity需要实现自定义接口
public class MainActivity extends Activity implements OnItemClickListener
		{

	// 模拟listview中加载的数据
	private static final String[] CONTENTS = { "北京", "上海", "广州", "深圳", "苏州",
			"南京", "武汉", "长沙", "杭州" };
	private List<String> contentList;
	private ListView mListView;
	private boolean isplaying;
	private boolean isSameItem;
	private int mPosition = -1;
	private int lastPosition = -1;
	private ContentAdapter contentAdapter;

	@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 = new ContentAdapter(this, contentList, interClick);
		mListView.setAdapter(contentAdapter);
		mListView.setOnItemClickListener(this);
	}

	/**
	 * 响应ListView的条目点击事件
	 */
	@Override
	public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
		Toast.makeText(this, "点击的条目位置是-->" + position, Toast.LENGTH_SHORT).show();
	}

	private InterClick interClick = new InterClick() {
	
	/**
	 * 接口方法,响应ListView按钮点击事件
	 */

	@Override
	public void commentClick(View v) {
		Toast.makeText(
				MainActivity.this,
				"listview的内部的评论按钮被点击了!,位置是-->" + (Integer) v.getTag()
						+ ",内容是-->" + contentList.get((Integer) v.getTag()),
				Toast.LENGTH_SHORT).show();
	}

	@Override
	public void shareClick(View v) {
		Toast.makeText(
				MainActivity.this,
				"listview的内部的分享按钮被点击了!,位置是-->" + (Integer) v.getTag()
						+ ",内容是-->" + contentList.get((Integer) v.getTag()),
				Toast.LENGTH_SHORT).show();
	}

	@Override
	public void animClick(View v) {
		mPosition = (Integer) v.getTag();
		if (lastPosition == mPosition) {
			isSameItem = true;
			isplaying = !isplaying;
		} else {
			isSameItem = false;
			isplaying = true;
		}
		contentAdapter.refreshPersonContactsAdapter(mPosition, isplaying, isSameItem);
		lastPosition = mPosition;
	}
	};
	
	

}

这里面向adapter传递了几个值,来控制帧动画的播放和暂停。


参考与:http://blog.csdn.net/waniu123/article/details/49532451




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值