我怎么能结合,两个OnClickListener在ArrayAdapter(视图)在Android上



我有两个OnClickListeners在我的ArrayAdapter under View。

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

在你的activity/Fragment(在你声明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);
}}

这段代码可以帮助你,定义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;
        }
    }

如果两个onClickListener都有相同的功能,那么你也不需要将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

最新更新