2016-08-17 145 views
1

我有一个表'D',每行有4个文字浏览。我设置了onlicklistener,它的工作原理。我想要的是让用户按下该行的任何文本视图,然后文本背景变为ltgray。我将解决是否每个textview或整个行被设置。 现在只有最后一个textview被设置为ltgray,无论用户按什么电视。基于代码,我的假设是我可以通过代码中的x索引将每个电视设置为onclick值:但是这种工作并不成功。我不能访问每个textViewB由x ?.该代码显示了tvB为其他情况设置,但这个新的设置所有textview的文本背景。我不想排行背景。这很容易,而且很有效。但只有边界显示。我需要的是该表格中所有4个电视的文本背景。 感谢您提前:动态设置textview背景颜色

try { 
     for(int x=0 ; x<loopCount; x++){ 
      TableRow.LayoutParams params = new TableRow.LayoutParams(headerCellsWidth[x + 1], LayoutParams.MATCH_PARENT); 
      params.setMargins(2, 2, 0, 0); 

      Log.d("Loadrunner", "info[x] " + x + " " + info[x]); 
      final TextView textViewB = this.bodyTextView(info[x]); 
      textViewB.setTextColor(0xFF000000); 
      tableRowForTableD.addView(textViewB, params); 
      //*************************************** Clickable cell 
      tableRowForTableD.setClickable(true); 
      tableRowForTableD.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        //tableRowForTableD.setBackgroundColor(getResources().getColor(android.R.color.holo_blue_bright)); 
        textViewB.setBackgroundColor(Color.LTGRAY); 
        Toast.makeText(getContext(), "Item on aisle select/deselect", Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      tableRowForTableD.setOnLongClickListener(new View.OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View v) { 
        //tableRowForTableD.setBackgroundColor(getResources().getColor(android.R.color.holo_blue_bright)); 
        Toast.makeText(getContext(), "Item on aisle Edit", Toast.LENGTH_SHORT).show(); 
       return true; 
       } 
      }); 
      //*************************************************************** 
     } 
    } catch(Exception e){ 
     e.printStackTrace(); 
    } 

其所有的代码来完成。没有xml或样式。

+0

问题是:您正在设置每个循环中的OnClickListener。一个视图只能有一个OnClickListener,所以只有最后一个会起作用。提示解决方案:为每个tableRow保留一个textview数组,以便您可以在点击行时循环访问该数组 – devnull69

+0

@devnull,您在这里指出了问题。只有最后一个textview才能获得背景更改。我真的不想跟踪和同步数组。 –

回答

1
yourView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.your_color)); 

yourView.setBackgroundColor(getResources().getColor(R.color.your_color)); 

yourView.setBackgroundColor(Color.parseColor("#ffffff")); 

我相信你想要的是在onClickListener。你已经有了这个观点,只是改变点击的观点。例如:

@Override 
public void onClick(View v) { 
    ViewGroup row = (ViewGroup) v.getParent(); 
    for (int itemPos = 0; itemPos < row.getChildCount(); itemPos++) { 
     View view = row.getChildAt(itemPos); 
     if (view instanceof TextView) { 
      textView = (TextView) view; 
      textView.setBackgroundColor(Color.LTGRAY); 
     } 
    } 
    Toast.makeText(getContext(), "Item on aisle select/deselect", Toast.LENGTH_SHORT).show(); 
} 
+0

但是点击的视图是表格行... OP想要改变该行中所有textview的背景颜色 – devnull69

+2

在** OnClick **中添加: ViewGroup row =(ViewGroup)v.getParent() ; (itemPos = 0; itemPos Amg91

+0

您应该将其添加到您的答案 – devnull69