Android 在自定义适配器的ListView项目内的项目上设置OnClickListener

Android 在自定义适配器的ListView项目内的项目上设置OnClickListener,android,listview,android-listview,Android,Listview,Android Listview,我已经为列表创建了一个自定义适配器,其中列出了不同的项目,每个项目都有一个要邀请的按钮。单击相应的invite按钮时,项目应水平翻转,这样可以正常工作。问题是,当我单击第一个项目的邀请按钮时,第四个项目的邀请按钮也被单击。我附上代码hee package rovoltlabs.coffeechat.adapters; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.

我已经为列表创建了一个自定义适配器,其中列出了不同的项目,每个项目都有一个要邀请的按钮。单击相应的invite按钮时,项目应水平翻转,这样可以正常工作。问题是,当我单击第一个项目的邀请按钮时,第四个项目的邀请按钮也被单击。我附上代码hee

package rovoltlabs.coffeechat.adapters;

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

import rovoltlabs.coffeechat.R;
import rovoltlabs.coffeechat.animation.AnimationFactory;
import rovoltlabs.coffeechat.animation.AnimationFactory.FlipDirection;
import rovoltlabs.coffeechat.volley.utils.Const;
import rovoltslabs.coffeechat.app.AppController;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
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.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewAnimator;

import com.android.volley.Request.Method;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.StringRequest;

public class MyCustomAdapter extends BaseAdapter implements OnClickListener {

    Context contexts;
    List<String> name = new ArrayList<String>();
    List<String> ids = new ArrayList<String>();
    List<String> slots = new ArrayList<String>();
    List<String> heading = new ArrayList<String>();
    List<String> showtime = new ArrayList<String>();
    List<Bitmap> img = new ArrayList<Bitmap>();
    List<ViewHolder> myview = new ArrayList<ViewHolder>();
    private String tag_json_obj = "jobj_req";

    private LayoutInflater mLayoutInflater;
    View row;
    ViewHolder holder;

    public MyCustomAdapter(Context context, List<String> name,
            List<Bitmap> img, List<String> heading, List<String> slots,
            List<String> id) {
        super();
        this.contexts = context;
        this.name = name;
        this.img = img;
        this.heading = heading;
        this.slots = slots;
        this.ids = id;

        mLayoutInflater = ((Activity) contexts).getLayoutInflater();
    }

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

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

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

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

        // check to see if the reused view is null or not, if is not null then
        // reuse it
        if (view == null) {
            holder = new ViewHolder();
            view = mLayoutInflater.inflate(R.layout.item, null);
            holder.name = (TextView) view.findViewById(R.id.Name);
            holder.fname = (TextView) view.findViewById(R.id.flipName);
            holder.msg = (EditText) view.findViewById(R.id.fsend);
            holder.heading = (TextView) view.findViewById(R.id.ddheading);
            holder.distance = (TextView) view.findViewById(R.id.Distance);
            holder.image = (ImageView) view.findViewById(R.id.imagecoffee);
            holder.invite = (Button) view.findViewById(R.id.inviteButton);
            holder.send = (Button) view.findViewById(R.id.fsendButton);
            holder.time = (TextView) view.findViewById(R.id.timefree);
            holder.viewAnimator = (ViewAnimator) view
                    .findViewById(R.id.viewFlipper);
            myview.add(holder);
            holder.v = view;

        } else {
            holder = (ViewHolder) view.getTag();

        }
        view.setTag(holder);
        holder.invite.setOnClickListener(this);


        holder.send.setOnClickListener(this);

        holder.name.setText(name.get(position).split("\n")[0]);
        holder.fname.setText(name.get(position).split("\n")[0]);
        holder.heading.setText(heading.get(position));
        String temp = "";
        int sl = Integer.parseInt(slots.get(position));
        if (sl % 2 == 0) {
            temp = "" + ((sl / 2) - 1) + ":30 - " + ((sl / 2)) + ":00";
        } else {
            temp = "" + ((sl / 2)) + ":00-" + ((sl / 2)) + ":30";
        }

        holder.time.setText(temp);

        holder.distance.setText(name.get(position).split("\n")[1] + " m");
        holder.image.setImageBitmap(img.get(position));

        holder.invite.setTag(position);
        holder.send.setTag(position);

        return view;
    }

    private static class ViewHolder {

        protected TextView name;
        protected TextView heading;
        protected TextView distance, time;
        protected ImageView image;
        protected Button invite, send;
        protected View v;
        protected ViewAnimator viewAnimator;
        protected TextView fname;
        protected EditText msg;

    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if (v.getId() == R.id.inviteButton) {

            AnimationFactory.flipTransition(
                    myview.get((Integer) v.getTag()).viewAnimator,
                    FlipDirection.LEFT_RIGHT);


        } else if (v.getId() == R.id.fsend) {
            SharedPreferences pref = contexts.getApplicationContext()
                    .getSharedPreferences("MyPref", 0);
            String slotsss = "{\"slots\":[" + slots.get((Integer) v.getTag())
                    + "]}";
            final Map<String, String> params = new HashMap<String, String>();

            params.put("slot", slotsss);
            Log.e("invite slots", slotsss);
            params.put("to", ids.get((Integer) v.getTag()));
            params.put("from", pref.getString("id", "N/A"));
            params.put("message", myview.get((Integer) v.getTag()).msg
                    .getText().toString());
            StringRequest jsonObjReq = new StringRequest(Method.POST,
                    Const.URL_INVITE, new Response.Listener<String>() {

                        @Override
                        public void onResponse(String response) {
                            Log.d("Slots Response: ", response.toString());
                            Toast.makeText(contexts, "invited" + response,
                                    Toast.LENGTH_SHORT).show();
                        }
                    }, new Response.ErrorListener() {

                        @Override
                        public void onErrorResponse(VolleyError error) {
                            VolleyLog.d("invite Error:",
                                    "Error: " + error.getMessage());

                        }
                    }) {

                /**
                 * Passing some request headers
                 * */

                @Override
                protected Map<String, String> getParams() {

                    return params;
                }

            };

            // Adding request to request queue
            AppController.getInstance().addToRequestQueue(jsonObjReq,
                    tag_json_obj);

        }

    }

}
package rovoltlabs.coffeechat.adapters;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
进口rovoltlabs.coffeechat.R;
导入rovoltlabs.coffeechat.animation.AnimationFactory;
导入rovoltlabs.coffeechat.animation.AnimationFactory.FlipDirection;
导入rovoltlabs.coffeechat.volley.utils.Const;
导入rovoltsplates.coffeechat.app.AppController;
导入android.app.Activity;
导入android.content.Context;
导入android.content.SharedReferences;
导入android.graphics.Bitmap;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
导入android.widget.ViewAnimator;
导入com.android.volley.Request.Method;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.VolleyLog;
导入com.android.volley.toolbox.StringRequest;
公共类MyCustomAdapter扩展BaseAdapter实现OnClickListener{
语境;
列表名称=新的ArrayList();
列表ID=新的ArrayList();
列表插槽=新的ArrayList();
列表标题=新建ArrayList();
List showtime=new ArrayList();
List img=new ArrayList();
List myview=new ArrayList();
私有字符串tag_json_obj=“jobj_req”;
私人停车场平面布置;
查看行;
视窗座;
公共MyCustomAdapter(上下文、列表名称、,
列出img、列表标题、列表插槽、,
列表id){
超级();
this.context=上下文;
this.name=名称;
this.img=img;
this.heading=标题;
这个。插槽=插槽;
this.ids=id;
mLayoutInflater=((活动)上下文);
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回name.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共视图getView(内部位置、视图视图、视图组父视图){
//TODO自动生成的方法存根
//检查重用视图是否为null,如果不是null,则
//重复使用
如果(视图==null){
holder=新的ViewHolder();
视图=MLAyoutFlater.充气(R.layout.item,空);
holder.name=(TextView)view.findViewById(R.id.name);
holder.fname=(TextView)view.findViewById(R.id.flipName);
holder.msg=(EditText)view.findViewById(R.id.fsend);
holder.heading=(TextView)view.findViewById(R.id.ddheading);
holder.distance=(TextView)view.findViewById(R.id.distance);
holder.image=(ImageView)view.findViewById(R.id.imagecoffee);
holder.invite=(Button)view.findViewById(R.id.inviteButton);
holder.send=(按钮)view.findViewById(R.id.fsendButton);
holder.time=(TextView)view.findViewById(R.id.timefree);
holder.viewAnimator=(viewAnimator)视图
.findViewById(R.id.viewFlipper);
myview.add(持有者);
holder.v=视图;
}否则{
holder=(ViewHolder)view.getTag();
}
视图.设置标签(支架);
holder.invite.setOnClickListener(this);
holder.send.setOnClickListener(this);
holder.name.setText(name.get(position).split(“\n”)[0]);
holder.fname.setText(name.get(position.split)(“\n”)[0]);
holder.heading.setText(heading.get(position));
字符串temp=“”;
intsl=Integer.parseInt(slots.get(position));
如果(sl%2==0){
温度=”+((sl/2)-1+”:30-“+((sl/2))+”:00”;
}否则{
温度=”+((sl/2))+”:00-“+((sl/2))+”:30”;
}
holder.time.setText(温度);
holder.distance.setText(name.get(position).split(“\n”)[1]+“m”);
holder.image.setImageBitmap(img.get(position));
holder.invite.setTag(位置);
holder.send.setTag(位置);
返回视图;
}
私有静态类视图持有者{
受保护的文本视图名称;
受保护的文本视图标题;
受保护的文本视图距离、时间;
保护图像查看图像;
受保护的按钮邀请,发送;
保护视图v;
受保护的ViewAnimator ViewAnimator;
受保护的文本视图fname;
受保护的编辑文本消息;
}
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
if(v.getId()==R.id.inviteButton){
AnimationFactory.flipTransition(
myview.get((整数)v.getTag()).viewAnimator,
翻转方向(左/右);
}else if(v.getId()==R.id.fsend){
SharedReferences pref=contexts.getApplicationContext()
.getSharedReferences(“MyPref”,0);
字符串slotsss=“{\'slots\”:[“+slots.get((整数)v.getTag())
+ "]}";
final Map params=new HashMap();
参数put(“插槽”,插槽SS);
Log.e(“邀请插槽”,插槽);
params.put(“to”,ids.get((整数)v.getTa