2016-08-17 5 views
1

テーブル「D」は、各行に4つのテキストビューがあります。私はonlicklistenerを設定し、それは動作します。私が望むのは、ユーザーがその行の任意のテキストビューを押して、テキストの背景がltgrayに変わることです。私は各テキストビューまたは行全体が設定されるかどうかを解決します。 ユーザーが押したテレビに関係なく、最後のtextviewだけがltgrayに設定されます。コードに基づいて私の前提は、コード内のxのインデックスによって各tvをonclick値に設定できるということです:しかし、それは動作しません。私は各textViewBにx?でアクセスします。このコードは、他の状況に合わせてtvBが設定されていることを示していますが、この新しい方法はすべてのテキストビューのテキスト背景を設定します。私は行の背景をしたくない。それは簡単で機能します。ボーダーだけが表示されます。私の必要性は、そのテーブル行のすべての4つのテレビのためのテキストの背景の変更です。事前に 感謝あなたを:すべてのコードで行わ動的にテキストビューの背景色を設定する

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を設定しています。ビューには1つのOnClickListenerしかないので、最後のものだけが機能します。解決策のヒント:各tableRowのテキストビューの配列を保持して、 – devnull69

+0

@devnull行のクリックでこの配列をループすることができます。ここで問題を解決しました。最後のテキストビューだけが背景の変更を取得します。私は本当に配列を追跡して同期させたくありません。 –

答えて

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は、その行の(すべての)テキストビューの背景色を変更します。 – devnull69

+2

** OnClick ** add: ViewGroup row =(ViewGroup)v.getParent() ; for(int itemPos = 0; itemPos Amg91

+0

回答に追加する必要があります – devnull69