我如何在Android上的ArrayAdapter(View)中组合两个OnClickListener

时间:2016-11-10 16:28:52

标签: android listview android-arrayadapter onclicklistener

我在查看下的ArrayAdapter中有两个OnClickListener。

我有onClick行和onClick按钮,两者都在同一个Listview中。我想把它们结合起来。为两者创建一个OnClickListener。单击时,它们都会转到相同的Intent /页面。

不知道怎么做,不重复我的代码。

提前致谢。

  public class ListAdapter extends ArrayAdapter {

    private List<ExerciseListModel> exModelList;
    private int resource;
    private LayoutInflater inflater;
    public ListAdapter(Context context, int resource, List<ExerciseListModel> objects) {
        super(context, resource, objects);
        exModelList = objects;
        this.resource = resource;
        inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;

        if(convertView == null){
            holder = new ViewHolder();
            convertView = inflater.inflate(resource, null);
            holder.exTitle = (TextView)convertView.findViewById(R.id.myTitle);
            holder.exBody = (TextView)convertView.findViewById(R.id.myBody);
            holder.exId = (TextView)convertView.findViewById(R.id.myId);
            holder.exDone = (TextView)convertView.findViewById(R.id.myCount);
            holder.exIcon = (ImageView)convertView.findViewById(R.id.myIcon);
            holder.btnStart = (Button)convertView.findViewById(R.id.btnStart);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        //onClick Row
        convertView.setOnClickListener(new View.OnClickListener() {
            public void onClick(final View v) {

                String nid = exModelList.get(position).getNid();
                String title = exModelList.get(position).getTitle();
                String body = exModelList.get(position).getBody();

                Intent intent = new Intent(ExerciseListActivity.this, ExerciseDetailsActivity.class);
                intent.putExtra("nid", nid);
                intent.putExtra("title", title);
                intent.putExtra("body", body);
                startActivity(intent);
            }
        });
        //onClick Button
        holder.btnStart.setOnClickListener(new View.OnClickListener() {
            public void onClick(final View v) {

                String nid = exModelList.get(position).getNid();
                String title = exModelList.get(position).getTitle();
                String body = exModelList.get(position).getBody();

                Intent intent = new Intent(ExerciseListActivity.this, ExerciseDetailsActivity.class);
                intent.putExtra("nid", nid);
                intent.putExtra("title", title);
                intent.putExtra("body", body);
                startActivity(intent);
            }
        });

        holder.exId.setText("ID: " + exModelList.get(position).getNid());
        holder.exBody.setText(exModelList.get(position).getBody());
        holder.exTitle.setText(exModelList.get(position).getTitle());

        if(exModelList.get(position).getExercise_done().equals("[]")){
            holder.exDone.setText(exercise_not_done);
            holder.exIcon.setImageResource(R.drawable.exercise_not_started);
        }else{
            String exercise_count = exModelList.get(position).getExercise_done();
            String ex_done = exercise_done + " " + exercise_count + " " + exercise_times_done;
            holder.exDone.setText(ex_done);
            holder.exIcon.setImageResource(R.drawable.exercise_started);
        }
        return convertView;
    }
    class ViewHolder{
        private TextView exTitle;
        private TextView exBody;
        private TextView exId;
        private ImageView exIcon;
        private TextView exDone;
        private Button btnStart;
    }
}

3 个答案:

答案 0 :(得分:0)

在您的活动/片段(您声明ListView的地方)

list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

    Intent intent = new Intent(ExerciseListActivity.this, ExerciseDetailsActivity.class);
            intent.putExtra("nid", nid);
            intent.putExtra("title", title);
            intent.putExtra("body", body);
            startActivity(intent);
}}

答案 1 :(得分:0)

  

此代码可以帮助您,为两个View定义OnClicklistener方法   和按钮。

    public class ListAdapter extends ArrayAdapter {

        private List<ExerciseListModel> exModelList;
        private int resource;
        private LayoutInflater inflater;
        public ListAdapter(Context context, int resource, List<ExerciseListModel> objects) {
            super(context, resource, objects);
            exModelList = objects;
            this.resource = resource;
            inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            ViewHolder holder = null;

            if(convertView == null){
                holder = new ViewHolder();
                convertView = inflater.inflate(resource, null);
                holder.exTitle = (TextView)convertView.findViewById(R.id.myTitle);
                holder.exBody = (TextView)convertView.findViewById(R.id.myBody);
                holder.exId = (TextView)convertView.findViewById(R.id.myId);
                holder.exDone = (TextView)convertView.findViewById(R.id.myCount);
                holder.exIcon = (ImageView)convertView.findViewById(R.id.myIcon);
                holder.btnStart = (Button)convertView.findViewById(R.id.btnStart);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            //onClick Row
            convertView(OnClickListener);

            //onClick Button
            holder.btnStart(OnClickListener)
            holder.exId.setText("ID: " + exModelList.get(position).getNid());
            holder.exBody.setText(exModelList.get(position).getBody());
            holder.exTitle.setText(exModelList.get(position).getTitle());

            if(exModelList.get(position).getExercise_done().equals("[]")){
                holder.exDone.setText(exercise_not_done);
                holder.exIcon.setImageResource(R.drawable.exercise_not_started);
            }else{
                String exercise_count = exModelList.get(position).getExercise_done();
                String ex_done = exercise_done + " " + exercise_count + " " + exercise_times_done;
                holder.exDone.setText(ex_done);
                holder.exIcon.setImageResource(R.drawable.exercise_started);
            }
            return convertView;
        }
public void OnClickListener() {                

                    String nid = exModelList.get(position).getNid();
                    String title = exModelList.get(position).getTitle();
                    String body = exModelList.get(position).getBody();

                    Intent intent = new Intent(ExerciseListActivity.this, ExerciseDetailsActivity.class);
                    intent.putExtra("nid", nid);
                    intent.putExtra("title", title);
                    intent.putExtra("body", body);
                    startActivity(intent);

            }
        class ViewHolder{
            private TextView exTitle;
            private TextView exBody;
            private TextView exId;
            private ImageView exIcon;
            private TextView exDone;
            private Button btnStart;
        }
    }

答案 2 :(得分:0)

如果两个onClickListeners具有相同的功能,那么您也不需要将onClickListener添加到该按钮。只需删除此侦听器,只将其添加到您的行中。即使您单击按钮,它也会起作用。 只需做这样的事情

public class ListAdapter extends ArrayAdapter {

private List<ExerciseListModel> exModelList;
private int resource;
private LayoutInflater inflater;
public ListAdapter(Context context, int resource, List<ExerciseListModel> objects) {
    super(context, resource, objects);
    exModelList = objects;
    this.resource = resource;
    inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;

    if(convertView == null){
        holder = new ViewHolder();
        convertView = inflater.inflate(resource, null);
        holder.exTitle = (TextView)convertView.findViewById(R.id.myTitle);
        holder.exBody = (TextView)convertView.findViewById(R.id.myBody);
        holder.exId = (TextView)convertView.findViewById(R.id.myId);
        holder.exDone = (TextView)convertView.findViewById(R.id.myCount);
        holder.exIcon = (ImageView)convertView.findViewById(R.id.myIcon);
        holder.btnStart = (Button)convertView.findViewById(R.id.btnStart);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    //onClick Row
    convertView.setOnClickListener(new View.OnClickListener() {
        public void onClick(final View v) {

            String nid = exModelList.get(position).getNid();
            String title = exModelList.get(position).getTitle();
            String body = exModelList.get(position).getBody();

            Intent intent = new Intent(ExerciseListActivity.this, ExerciseDetailsActivity.class);
            intent.putExtra("nid", nid);
            intent.putExtra("title", title);
            intent.putExtra("body", body);
            startActivity(intent);
        }
    });

    holder.exId.setText("ID: " + exModelList.get(position).getNid());
    holder.exBody.setText(exModelList.get(position).getBody());
    holder.exTitle.setText(exModelList.get(position).getTitle());

    if(exModelList.get(position).getExercise_done().equals("[]")){
        holder.exDone.setText(exercise_not_done);
        holder.exIcon.setImageResource(R.drawable.exercise_not_started);
    }else{
        String exercise_count = exModelList.get(position).getExercise_done();
        String ex_done = exercise_done + " " + exercise_count + " " + exercise_times_done;
        holder.exDone.setText(ex_done);
        holder.exIcon.setImageResource(R.drawable.exercise_started);
    }
    return convertView;
}
class ViewHolder{
    private TextView exTitle;
    private TextView exBody;
    private TextView exId;
    private ImageView exIcon;
    private TextView exDone;
    private Button btnStart;
}

}

编辑:或者您可以关注@ GiuseppeLabanca的代码并从适配器中删除两个onClickListeners。