如何在其适配器

时间:2017-08-20 12:26:01

标签: java android arrays arraylist android-recyclerview

我无法用我的问题完美地表达这个问题,但基本上我想要实现的是: -

单击项目时,我对包含textview的项目进行了回收查看;将显示一个自定义对话框,其中包含所单击元素的相同内容。

到目前为止一切顺利,在同一个对话框中,每个边上都有两个箭头(左右两边),箭头按钮应该在recyclerview项目之间导航,并根据新位置更新内容。

以下是我的所作所为:

  @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
    holder.tvTitle.setText(data.get(position).getTitle());

    holder.itemView.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View view) {

      //Initializing the custom dailog
        final Dialog dialog = new Dialog(context);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.getWindow() .setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
        dialog.getWindow().getAttributes().gravity = Gravity.TOP;
        dialog.setContentView(R.layout.dailog);
        dialog.show();

        ImageView RightArrow = (ImageView) dialog.findViewById(R.id.dia_right_arrow);
        ImageView LeftArrow = (ImageView) dialog.findViewById(R.id.dia_left_arrow);
        final TextView textViewTitle = (TextView) dialog.findViewById(R.id.dia_tvTtile);


        textViewTitle.setText(data.get(position).getTitle());

        RightArrow.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {

              int curPosi = 0;  
               if (data.size() != 0) {
                 curPosi = position+1;
              }
         textViewTitle.setText(data.get(position).getTitle());
          }
        });

        LeftArrow.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {

            int curPosi = 0;
            if (data.size() != 0) {
              curPosi = position-1;
            } 
          textViewTitle.setText(data.get(position).getTitle());

          } });
      }});

     }

结果:

当我点击右箭头时,它会100%工作,但是如果再次点击则没有任何反应!!

如果在任何时候单击左箭头,它会发生此异常崩溃:

java.lang.ArrayIndexOutOfBoundsException: length=10; index=-1
  

是否有可能实现循环效果,我的意思是当我到达时   最后一个索引再次单击它会显示第一个索引和副索引   反之亦然..!

任何帮助?

1 个答案:

答案 0 :(得分:1)

问题似乎来自于您检查点击限制的方式。你可以试试这个

将curPosi添加为类成员变量

private int curPosi;

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
holder.tvTitle.setText(data.get(position).getTitle());



holder.itemView.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View view) {

  curPosi = position

  //Initializing the custom dailog
    final Dialog dialog = new Dialog(context);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.getWindow() .setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
    dialog.getWindow().getAttributes().gravity = Gravity.TOP;
    dialog.setContentView(R.layout.dailog);
    dialog.show();

    ImageView RightArrow = (ImageView) dialog.findViewById(R.id.dia_right_arrow);
    ImageView LeftArrow = (ImageView) dialog.findViewById(R.id.dia_left_arrow);
    final TextView textViewTitle = (TextView) dialog.findViewById(R.id.dia_tvTtile);


    textViewTitle.setText(data.get(position).getTitle());

    RightArrow.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {

         int lastIndex = data.size()-1;

        if (lastIndex == curPosi ) { // this prevents the crash, so if the next button is clicked while the last index is showing it will reset and show the first one..!
          curPosi = 0;
        } else if(curPosi < data.size()) {
          curPosi++;
        }

     textViewTitle.setText(data.get(curPosi).getTitle());
      }
    });

    LeftArrow.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {

       //same thing here with this "if", when the previous button clicked from the first; it will show the last item..!  
         if (curPosi == 0) { 
          curPosi = data.size();
        }

        if (curPosi > 0) {
          curPosi--;
        }

      textViewTitle.setText(data.get(curPosi).getTitle());

      } });
  }});

 }