单击按钮更改以编程方式创建的textview背景

时间:2019-02-11 11:45:08

标签: java android for-loop background textview

我在for循环中以编程方式创建了TextView,在textView touch上,我在每个textview上都设置了边框线。 我要在单击一次按钮时删除所有textView边框线。 但它只会删除最后创建的textView边框线。

这是我的代码

for (int i = 0; i < jsonArray.length(); i++) {
  JSONObject c = jsonArray.getJSONObject(i);
  final String text = c.getString(Constants.CARD_TEXT);
  final AppCompatTextView textView = new AppCompatTextView(Card.this);
  textView.setId(i);
  textView.setText(text);
  textView.setY((int) (hgt * yaxis / 100));
  final int finalI1 = i;
  txtNext.setOnClickListener(new View.OnClickListener() {
    @SuppressLint("ResourceType")
    @Override
    onClick(View v) {
      for (int j = 0; j <= finalI1; j++) {
        Log.e("Clicked1221", String.valueOf(textView.getId() - j));
        if (textView.getId() - j == j) {
          ;
        }
        textView.setBackgroundResource(0);
      }
    }
  }
});

final int finalI = i;
textView.setOnTouchListener(new View.OnTouchListener() {
  @Override
  public boolean onTouch(View v, MotionEvent event) {

    textView.setSelected(true);

    if (gestureDetector.onTouchEvent(event)) {

      if (textView.isSelected()) {
        textView.setBackgroundResource(R.drawable.doted);
      }
      return true;
    }
    imgBackground.setOnTouchListener(new View.OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {

        textView.setBackgroundResource(0);

        textView.setSelected(false);

        return false;
      }
    });
    return true;
  }
});

layoutImage.addView(textView);

1 个答案:

答案 0 :(得分:0)

您正在调用textView.setBackgroundResource(R.drawable.doted);在仅一个文本视图上,如果要更改所有已创建文本视图的背景,则必须将每个已创建文本视图的引用存储在某个地方,创建一个文本视图列表,并将每个新文本视图添加到该列表中,然后在onTouchListener中执行类似的操作

 for(textView:textViews){
     textView.setBackgroundResource(0);

     textView.setSelected(false);

  }