【问题标题】:How can i combine, two OnClickListener in ArrayAdapter (View) on Android我如何在 Android 上的 ArrayAdapter (View) 中组合两个 OnClickListener
【发布时间】:2016-11-10 16:28:51
【问题描述】:

我的 ArrayAdapter 在 View 下有两个 OnClickListener。

我有 onClick 行和 onClick 按钮,它们都在同一个 Listview 中。我想把它们结合起来。为两者制作一个 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);
            }
        });
        //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;
    }
}

【问题讨论】:

    标签: android listview android-arrayadapter onclicklistener


    【解决方案1】:

    在您的活动/片段内(您声明 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);
    }}
    

    【讨论】:

      【解决方案2】:

      这段代码可以帮助你,将 OnClicklistener 方法定义为 View 和按钮。

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

      【讨论】:

        【解决方案3】:

        如果两个 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。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多