Android 单击列表视图阵列适配器位置

Android 单击列表视图阵列适配器位置,android,listview,position,adapter,Android,Listview,Position,Adapter,我有一个带有ArrayAdapter的listview。某个位置的ListView在某个ArrayList中使用相同的位置填充自己。在每个列表项中 有两个按钮。当onClickListener启动时,它会 被重写的视图getView的位置(位置、视图等)从ArrayList中取出一些变量并将其发送到数据库。问题是,位置不是很准确。有时我会得到一个列表项在我想要的列表项之上的位置。代码如下: public class MemoAdapter extends ArrayAdapter<Stri


我有一个带有ArrayAdapter的listview。某个位置的ListView在某个ArrayList中使用相同的位置填充自己。在每个列表项中 有两个按钮。当onClickListener启动时,它会 被重写的视图getView的位置(位置、视图等)从ArrayList中取出一些变量并将其发送到数据库。问题是,位置不是很准确。有时我会得到一个列表项在我想要的列表项之上的位置。代码如下:

public class MemoAdapter extends ArrayAdapter<String> {

    private final Activity context;
    ArrayList<String> commentarray;
    ArrayList<String> fromarray;
    ArrayList<String> datearray;
    ArrayList<String> ids;
    ArrayList<String> feedback;
    Dialog dialog;
    EditText feedbacktxt;
    String token;
    String website;

    public MemoAdapter(Activity context, ArrayList<String> commentArray,
            ArrayList<String> fromArray, ArrayList<String> dateArray,
            ArrayList<String> ids, ArrayList<String> feedback, String token,
            String website) {
        super(context, R.layout.memo_listitem, commentArray);
        this.context = context;
        this.commentarray = commentArray;
        this.fromarray = fromArray;
        this.datearray = dateArray;
        this.ids = ids;
        this.feedback = feedback;
        this.token = token;
        this.website = website;
    }
    @Override
    public long getItemId(int position) {

        return 0;
    }
    // static to save the reference to the outer class and to avoid access to
    // any members of the containing class
    static class ViewHolder {

        public TextView textView;
        public TextView textView2;
        public TextView textView3;
        public TextView textView4;
        // public ImageView reply;
        // public ImageView accept;
        public Button reply;
        public Button accept;
        public RelativeLayout r;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        final ViewHolder holder;
        View rowView = convertView;

        if (rowView == null) {
            LayoutInflater inflater = context.getLayoutInflater();
            rowView = inflater.inflate(R.layout.memo_listitem, null);
            holder = new ViewHolder();

            holder.textView = (TextView) rowView
                    .findViewById(R.id.memodescription);
            holder.textView2 = (TextView) rowView.findViewById(R.id.memofrom);
            holder.textView3 = (TextView) rowView.findViewById(R.id.memodate);
            holder.textView4 = (TextView) rowView
                    .findViewById(R.id.memofeedback);
            holder.reply = (Button) rowView.findViewById(R.id.buttonFeedback);
            holder.accept = (Button) rowView.findViewById(R.id.buttonAccepteer);
            rowView.setTag(holder);
        } else {
            holder = (ViewHolder) rowView.getTag();
        }

        holder.textView.setText(commentarray.get(position));
        holder.textView2.setText(datearray.get(position));
        holder.textView3.setText(fromarray.get(position));
        holder.textView4.setText(feedback.get(position));

        if (holder.textView4.getText().toString().equals("")
                || holder.textView4.getText().toString().equals(" ")) {
            holder.textView4.setText(" - ");
        }

        // ONCLICKLISTENER FOR REPLYIMAGE
        holder.reply.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                dialog = new Dialog(NostradamusActivity2.parentcontext);
                dialog.setContentView(R.layout.memo_dialog);
                dialog.setTitle("Feedback");
                feedbacktxt = (EditText) dialog.findViewById(R.id.memoeddittxt);

                Button cancel = (Button) dialog
                        .findViewById(R.id.memobtncancel);

                // CANCEL BUTTON ONCLICKLISTENER REPLYIMAGE
                cancel.setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        dialog.dismiss();
                    }
                });

                Button okay = (Button) dialog.findViewById(R.id.memobtnokay);

                // OKAY BUTTON ONCLICKLISTENER REPLYIMAGE
                okay.setOnClickListener(new OnClickListener() {
                    private String errormessage;
                    private AlertDialog alertDialog;

                    public void onClick(View v) {
                        Database2 db = new Database2(
                                "https://"
                                        + website
                                        + "/index2.php?option=com_webservices&controller=json&method=core.memos.memo_feedback&token=",
                                "token", token, "id", ids.get(position),
                                "memo_feedback", feedbacktxt.getText()
                                        .toString());
         }

        // //ACCEPTEER MEMO BUTTON ONCLICKLISTENER
        holder.accept.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                AlertDialog.Builder builder = new AlertDialog.Builder(
                        NostradamusActivity2.parentcontext);
                builder.setMessage("Heeft u de opdracht uitgevoerd?")
                        .setCancelable(false)
                        .setPositiveButton("Ja",
                                new DialogInterface.OnClickListener() {
                                    private AlertDialog alertDialog;

                                    public void onClick(DialogInterface dialog,
                                            int id) {
                                        Database2 dbaccept = new Database2(
                                                "http://intern.koeckers.nl/index2.php?option=com_webservices&controller=json&method=core.memos.memo_state&token=",
                                                "token", token, "id", ids
                                                        .get(position),
                                                "memo_completed", "1");

                                                        dialog.dismiss();
                                            }
                                        } catch (Exception e) {
                                            e.printStackTrace();
                                        }
                                    }
                                })
                        .setNegativeButton("Nee",
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog,
                                            int id) {
                                        dialog.cancel();
                                    }
                                });
                AlertDialog alert = builder.create();
                alert.show();
            }
        });
        return rowView;
    }
}
公共类MemoAdapter扩展了ArrayAdapter{
私人最终活动背景;
数组列表;
ArrayList fromarray;
ArrayList日期数组;
数组列表ID;
阵列列表反馈;
对话;
编辑文本反馈;
字符串标记;
字符串网站;
公共MemoAdapter(活动上下文、ArrayList commentArray、,
ArrayList fromArray,ArrayList dateArray,
ArrayList ID、ArrayList反馈、字符串标记、,
字符串(网站){
super(上下文,R.layout.memo\u列表项,commentArray);
this.context=上下文;
this.commentarray=commentarray;
this.fromarray=fromarray;
this.datearray=datearray;
this.ids=ids;
这个。反馈=反馈;
this.token=token;
this.website=网站;
}
@凌驾
公共长getItemId(int位置){
返回0;
}
//static保存对外部类的引用并避免访问
//包含类的任何成员
静态类视窗夹{
公共文本视图文本视图;
公共文本视图文本视图2;
公共文本视图文本视图3;
公共文本视图文本视图4;
//公众意见回复;
//公众形象接受;
公共按钮回复;
公共按钮接受;
公共关系;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终持票人;
视图行视图=转换视图;
if(rowView==null){
LayoutInflater充气器=上下文。getLayoutInflater();
rowView=充气机。充气(R.layout.memo\u列表项,空);
holder=新的ViewHolder();
holder.textView=(textView)行视图
.findViewById(R.id.memodescription);
holder.textView2=(TextView)rowView.findViewById(R.id.memofrom);
holder.textView3=(TextView)rowView.findViewById(R.id.memodate);
holder.textView4=(TextView)行视图
.findViewById(R.id.memofeedback);
holder.reply=(按钮)rowView.findViewById(R.id.buttonFeedback);
holder.accept=(按钮)rowView.findViewById(R.id.ButtonCepteer);
rowView.setTag(支架);
}否则{
holder=(ViewHolder)rowView.getTag();
}
holder.textView.setText(commentarray.get(position));
holder.textView2.setText(datearray.get(position));
holder.textView3.setText(fromarray.get(position));
holder.textView4.setText(feedback.get(position));
if(holder.textView4.getText().toString()等于(“”)
||holder.textView4.getText().toString().equals(“”){
holder.textView4.setText(“-”);
}
//REPLYIMAGE的ONCLICKLISTENER
holder.reply.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
dialog=新对话框(NostradamusActivity2.parentcontext);
setContentView(R.layout.memo_对话框);
对话框。设置标题(“反馈”);
feedbacktxt=(EditText)dialog.findViewById(R.id.MemoEdditText);
按钮取消=(按钮)对话框
.findviewbyd(R.id.memobtncancel);
//单击Listener REPLYIMAGE时取消按钮
cancel.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
dialog.dismise();
}
});
按钮OK=(按钮)dialog.findViewById(R.id.memobtnokay);
//OK按钮单击Listener REPLYIMAGE
好的。setOnClickListener(新的OnClickListener(){
私有字符串错误消息;
私人AlertDialog AlertDialog;
公共void onClick(视图v){
Database2 db=新数据库2(
“https://”
+网站
+“/index2.php?option=com\u webservices&controller=json&method=core.memos.memo\u feedback&token=“,
“令牌”,令牌,“id”,id.get(位置),
“备忘录反馈”,feedbacktxt.getText()
.toString());
}
////单击Listener上的ACCEPTEER备注按钮
holder.accept.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
AlertDialog.Builder=新建AlertDialog.Builder(
NostradamusActivity2.parentcontext);
builder.setMessage(“Heeft u de opdracht uitgevored?”)
.setCancelable(错误)
.setPositiveButton(“Ja”,
新建DialogInterface.OnClickListener(){
私人AlertDialog AlertDialog;
公共void onClick(对话框接口对话框,
int id){
Database2 dbaccept=新数据库2(
"http://intern.koeckers.nl/index2.php?option=com_webservices&controller=json&method=core.memos.memo_state&token=",
“代币”,代币,“我
Database2 dbaccept = new Database2(
    "http://intern.koeckers.nl/index2.php? option=com_webservices&controller=json&method=core.memos.memo_state&token=",
    "token", token, "id", ids.get(position),
    "memo_completed", "1");