2016-10-10 4 views
0

Table ID가있는 일부 표를 표시하기 위해 gridview를 사용합니다. 표 중 하나를 클릭하면 새 표를 열 것인지 묻는 대화 상자가 나타납니다.Android Gridview에서 클릭 한 항목의 배경색을 변경하지 못했습니다.

예를 클릭하면 배경색을 빨간색으로 변경하십시오. 그러나

view.setBackgroundColor(Color.parseColor("#ff0000")); 
view.setBackgroundColor(0xFF00FF00); 

가 작동하지 않습니다 아래의 2 가지 방법처럼 보인다!

여기에 전체 코드

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_table); 

    gridView=(GridView)findViewById(R.id.gridview); 
    String table_names[]={"1a","1b","1c","1d","2a","2b","2c","2d","3a","3b","3c","3d"}; 
    gridView.setAdapter(new my_adapter(this,table_names)); 
    gridView.setOnItemClickListener(this); 
} 

@Override 
public void onItemClick(final AdapterView<?> adapterView, final View view, final int i, long l) { 

    new AlertDialog.Builder(this) 
      .setTitle("Table number: "+adapterView.getItemAtPosition(i).toString()) 
      .setMessage("Open Table?") 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        view.setBackgroundColor(Color.parseColor("#ff0000")); 
       } 
      }) 
      .setNegativeButton("No", null) 
      .show(); 
} 
} 

class my_adapter extends BaseAdapter{ 

LayoutInflater inflater=null; 
Context ctx; 
String table_names[]; 
ArrayList store_table_no; 

my_adapter(Context ctx, String table_names[]){ 
    this.ctx=ctx; 
    this.table_names=table_names; 
    store_table_no=new ArrayList<Integer>(); 
    for (int i=0;i<table_names.length;i++){ 
     store_table_no.add(table_names[i]); 
    } 
} 

@Override 
public int getCount() { 
    return store_table_no.size(); 
} 

@Override 
public Object getItem(int i) { 
    return store_table_no.get(i); 
} 

@Override 
public long getItemId(int i) { 
    return i; 
} 

@Override 
public View getView(int i, View view, ViewGroup viewGroup) { 

    View row=view; 

    if(row==null){ 
     inflater=(LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row=inflater.inflate(R.layout.single,null); 
    } 

    TextView tv_table_no=(TextView)row.findViewById(R.id.table_no); 

    tv_table_no.setText(""+store_table_no.get(i)); 

    return row; 
} 

single.xml 쉽게 내 시나리오를 이해하기 위해

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<RelativeLayout 
    android:layout_width="170dp" 
    android:layout_height="100dp" 
    android:background="@android:color/holo_green_dark" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true"> 

    <TextView 
     android:text="101" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/table_no" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" /> 
</RelativeLayout> 
</RelativeLayout> 

이 스크린 샷에서 참조하시기 바랍니다에게 있습니다.

enter image description here

+0

'layout's' 코드도 게시하십시오. –

+0

@jaydroider가 single.xml plz 체크를 업로드했습니다. – gosulove

답변

1

설정하면 대화 상자에이 코드 예는이 위치를 가져 오는 방법을 당신의 gridview 자식 position.it의의 당신에 따라 여기에

gv.getChildAt(position).setBackgroundColor(Color.RED); 

위치를 클릭합니다.