시간표.PNG

 

 

안녕하세요. 제가 개인프로젝트로 시간표를 진행중입니다.
그림에 나와있는 시간표가 제가 만들고 있는 시간표 UI인데요.
일단 초기에 틀을 잡는 단계라  셀을 클릭하면, 제가 정해둔 문자열(알고리즘)이 셀에 출력이 되고,
셀의 배경색을 빨간색으로 변환하려 하는데, 잘 안됩니다.
 
그림에서 보시는 것처럼  (1)특정 셀을 누르면 문자열은  제가 누른셀에 잘 출력이 되는데, 배경색이
엉뚱한 셀에 채워집니다. 또한  그림에서 보시는 상태에서  (1)의 셀을 한번 더 클릭하면 그제서야 (1)의
셀에 배경색이 채워집니다만, 다른 엉뚱한 셀에 또 배경색이 채워집니다.
getchildat(position)으로 해당 아이템뷰를 받아서 배경색을 채우는것인데, 제 생각으로는 문제가 없다고 생각
되는데 도대체 무엇이 문제일까요?ㅠㅠ 염치없지만 여러분들의 도움이 필요합니다.
 
소스코드 첨부합니다.
 

메인 액티비티 소스코드입니다. 

 

package wony.Toolztimetable;

import java.util.ArrayList;
import android.R;
import android.app.Activity;
import android.os.Bundle;
import android.widget.GridView;
import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class ToolztimetableActivity extends Activity implements OnItemClickListener{
 
 private GridView maingrid;
 private ArrayList<String> Time_day;
 private MyAdapter aa;
 private TextView hh;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  int i,k=8;;
  super.onCreate(savedInstanceState);
  setContentView(wony.Toolztimetable.R.layout.main);
  maingrid = (GridView)findViewById(wony.Toolztimetable.R.id.Gridmain);
  maingrid.setOnItemClickListener(this);

  Time_day = new ArrayList<String>();
  Time_day.add(0,"");
  Time_day.add(1,"월");
  Time_day.add(2,"화");
  Time_day.add(3,"수");
  Time_day.add(4,"목");
  Time_day.add(5,"금");
  Time_day.add(6,"토");
  Time_day.add(7,"일");

  for(i=8;i<144;i++){
   if(i%8==0){
    Time_day.add(i,Integer.toString(k)+":00\n"+Integer.toString(++k)+":00");
   }
   else{
    Time_day.add(i,"");
   }
  }  
  int resID = wony.Toolztimetable.R.layout.item;
  aa = new MyAdapter(this,resID,Time_day);
  maingrid.setAdapter(aa);
 
 }
 
 @Override
 public void onItemClick(AdapterView<?> parent, View v, int position, long arg3) {
  //hh = (LinearLayout)v.findViewById(R.id.item_backgorund);
  int pos = position;
  if(pos%8==0 || pos<8){
   v.setClickable(false);
  }
        

   //hh = (TextView)v.findViewById(R.id.item_text);
   //Log.i("view",hh.toString());
   //LinearLayout qq = (LinearLayout)v.findViewById(R.id.item_backgorund);
 
   
   //hh.setText("알고리즘");
   Time_day.set(pos, "알고리즘");
   aa.notifyDataSetChanged();
   View temp =parent.getChildAt(pos);
   temp.setBackgroundResource(wony.Toolztimetable.R.color.red);
 
   Rect r = new Rect();
   temp.getGlobalVisibleRect(r);
   int top = r.top;
   int left = r.left;
   int bottom = r.bottom;
   int right = r.right;
   Log.v("bbong", "top : " + top + "\tleft : " +  left + "\tbottom : " + bottom + "\tright : " + right);

  
 }
}

class MyAdapter extends BaseAdapter {
 Context bb;
 LayoutInflater Inflater;
 ArrayList<String> Time_day2;
 int layout;

 public MyAdapter(Context context, int layout1, ArrayList<String> Timeday){
  bb = context;
  Inflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  Time_day2 = Timeday;
  layout = layout1;
 }
 public int getCount(){
  return Time_day2.size();
 }
 public String getItem(int position) {
  return Time_day2.get(position);
 }
 public long getItemid(int position) {
  return position;
 }
 @Override
 public long getItemId(int arg0) {
  // TODO Auto-generated method stub
  return 0;
 }

 public View getView(int position,View convertView, ViewGroup parent) {
  final int pos = position;
  if(convertView == null) {
   convertView = Inflater.inflate(layout,parent,false);
  }
  TextView aa = (TextView)convertView.findViewById(wony.Toolztimetable.R.id.item_text);
     //LinearLayout ss = (LinearLayout)convertView.findViewById(wony.Toolztimetable.R.id.item_backgorund);
  //LinearLayout abc = (LinearLayout)convertView.findViewById(R.id.item_backgorund);
  
 
  if(position%8==0 || position > 7){
   aa.setTextSize(9);
  }
  else{
   aa.setTextSize(14);
  }
  aa.setText(Time_day2.get(position));
  return convertView;
 }
}
 
그리드뷰 아이템레이아웃입니다.
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/item_backgorund"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="40dp"
    android:layout_height="33dp"
    android:background="@drawable/show"
    android:orientation="vertical">
   
    <TextView
    android:textSize="13sp"
    android:id="@+id/item_text"
    android:gravity="center"
    android:paddingLeft="0dp"
    android:paddingTop="0dp"
    android:textColor="#000000"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:background="@android:drawable/list_selector_background" >
    </TextView>
      
</LinearLayout>
 
 
메인 레이아웃입니다.
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
     
<GridView
    android:listSelector="@drawable/selector"
    android:numColumns="8"
    android:layout_width="320dp"
    android:stretchMode="columnWidth"
    android:layout_marginTop="3dp"
    android:id="@+id/Gridmain"
    android:layout_height="540dp"/>
   
</LinearLayout>