2013-11-15 4 views
2

내 안드로이드 응용 프로그램에는 런타임에로드되는 테이블 레이아웃이 있습니다. 테이블 행에 대해 OnClickListener를 설정했습니다.Android : 클릭하면 표 행의 배경색이 변경됩니다.

tr.setClickable(true); 
tr.setOnClickListener(trOnClickListener); 

클릭 할 때 테이블 행의 배경색을 변경해야합니다. 이것은 내 onClick 메서드입니다.

private OnClickListener trOnClickListener = new OnClickListener() { 
    public void onClick(View v) { 

     TableRow tablerow = (TableRow)v; 

     tablerow.setBackgroundDrawable(getResources().getDrawable(
       R.drawable.ab_stacked_solid_whiteaction)); 

    } 
}; 

테이블 행을 클릭하면 배경색이 변경됩니다. 다른 행을 클릭하면 배경색도 변경됩니다. 하지만 내가 원하는 것은 한 번에 한 행의 배경색을 변경해야합니다.

어떻게하면됩니까? 모든 제안을 부탁드립니다.

답변

0

가 당김 폴더에서이

private View pressedView = null; 

private OnItemClickListener getStartedListItem = new OnItemClickListener() { 

@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
     long arg3) { 
    // TODO Auto-generated method stub 
    Intent myintent = new Intent(getApplicationContext(),GetStartedWebview.class); 
    myintent.putExtra("SelectedItem", getStartedItems[position]); 
    startActivity(myintent); 

    if(pressedView != null) { 
     pressedView.setBackgroundResource(..); // reset background of old item 
     pressedView = arg1; // Point pressedView to new item 
    } 
} 
}; 
1

만들기 XML을 시도하고 BG으로이 설정을 미리

감사

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@drawable/cell_shape_in_white" android:state_pressed="true"/> 
    <item android:drawable="@drawable/cell_shape_in_grey"/> 

</selector> 

또는

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 


    <item android:drawable="@drawable/cell_shape_in_white" android:state_focused="true" android:state_pressed="false"/> 
    <item android:drawable="@drawable/cell_shape_in_white" android:state_focused="true"/> 
    <item android:drawable="@drawable/cell_shape_in_grey" android:state_focused="false"/> 
    <item android:drawable="@drawable/cell_shape_in_grey"/> 

</selector> 

또는

,

링크 이것은 비 XML 수정 중립 테이블 배경색으로 되돌릴 이전에 선택된 열을 발생 How to change the background color of a TableRow when focused?

+0

저는 이것을 사용했습니다. 그런 다음 행을 클릭하면 배경색이 노란색으로 변경됩니다 (예 :). 그러나 잠시 후에 이전 색 (흰색)으로 바뀝니다. 사용자가 다른 행을 클릭 할 때까지이 색상 (노란색)을 유지해야합니다. 사용자가 다른 행을 클릭하면 '색상이 노란색으로 변경되고 이전에 클릭 한 행의 색상은 흰색이어야합니다. 사실, 한 행만 노란색이 될 수 있습니다. 어떻게해야합니까? plz 설명 할 수 있습니까? – Rose18

+0

tablerow를 동적으로 생성하고 있습니까 –

+0

예. 내 테이블 레이아웃이 동적으로로드됩니다. – Rose18

0

(중위를 참조 회색)을 선택하고 강조 표시합니다 (노란색). 이는 선택된 (하위) 행의 적절한 색인 번호를 참조하여 수행됩니다.

public class dataTable extends Fragment { 
TextView tvSelectedRow = null; 
... 
row.setOnClickListener(new View.OnClickListener(){ 
       @Override 
       public void onClick(View v){ 
        if(tvSelectedRow == null) { 
         iRowNumber = tableLayout.indexOfChild(v); //This returns the rowID of the selected row 
         tableLayout.setBackgroundResource(R.color.LtGrey); //sets background color to LtGray for whole table. 
         row.setBackgroundResource(R.color.yellow);//changes background color of selected row to yellow.       
        }else if(tvSelectedRow != null){ 
         tableLayout.getChildAt(iRowNumber).setBackgroundResource(R.color.LtGrey);//causes previously selected row to revert to LtGray. 
         iRowNumber = tableLayout.indexOfChild(v); //Resets iRowNumber to new row selected by user....      
         row.setBackgroundResource(R.color.yellow);//changes background color of selected row to yellow.       
        } 
       } 
      }); 

행운을 빈다.

관련 문제