Listview数组适配器位置onClick

时间:2011-11-24 09:30:52

标签: android listview position adapter


我有一个带有ArrayAdapter的listview。位于某个位置的ListView在某些ArrayList中填充相同的位置。在每个listitem中 有两个按钮。当onClickListener启动时,它会得到 覆盖View ViewView(position,View等)的位置,从ArrayList中取出一些变量并将其发送到数据库。问题是,这个位置并不准确。有时我会将Listitem的位置放在我想要的Listitem之上。这是代码:

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;
    }
}

1 个答案:

答案 0 :(得分:0)

您将通过ids.get(position)获取该项目。 您使用的是arrayList,而是使用getTag()方法。 rowView.getTag()将为您提供ViewHolder,您可以从中获取正确的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");