2013-08-16 2 views
0

GridView에서 선택한 항목을 가져 오려고하는데 아이템을 클릭해도 아무 일도 일어나지 않습니다.GridView setOnItemClickListener가 클릭에 응답하지 않습니다.

내 로그 코드에서 모든 로그를하지 않는 : 여기

Log.i("postion", arg2+""); 내 코드입니다 :

calendarView = (의 GridView) this.findViewById (R.id.calendar);

 calendarView.setOnItemClickListener(new OnItemClickListener() 
     { 


     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      // TODO Auto-generated method stub 
      Log.i("postion", arg2+""); 

      Button temp = (Button) calendarView.getAdapter().getItem(arg2); 

      temp.setBackgroundColor(getResources().getColor(R.color.LightGreen)); 
     } 

     }); 

내 어댑터 :

public class GridCellAdapter extends BaseAdapter{ 
      private static final String tag = "GridCellAdapter"; 
      private final Context _context; 
      private final List<String> list; 
      private static final int DAY_OFFSET = 1; 
      private final String[] weekdays = new String[] { "Sun", "Mon", "Tue", 
        "Wed", "Thu", "Fri", "Sat" }; 
      private final String[] months = { "January", "February", "March", 
        "April", "May", "June", "July", "August", "September", 
        "October", "November", "December" }; 
      private final int[] daysOfMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 
        31, 30, 31 }; 
      private final int month, year; 
      private int daysInMonth, prevMonthDays; 
      private int currentDayOfMonth; 
      private int currentWeekDay; 
      private Button gridcell; 

      // Days in Current Month 
      public GridCellAdapter(Context context, int textViewResourceId, 
        int month, int year) { 

       super(); 
       this._context = context; 
       this.list = new ArrayList<String>(); 
       this.month = month; 
       this.year = year; 

       //Log.d(tag, "==> Passed in Date FOR Month: " + month + " " 
        // + "Year: " + year); 
       Calendar calendar = Calendar.getInstance(Locale.ENGLISH); 
       setCurrentDayOfMonth(calendar.get(Calendar.DAY_OF_MONTH)); 
       setCurrentWeekDay(calendar.get(Calendar.DAY_OF_WEEK)); 
       //Log.d(tag, "New Calendar:= " + calendar.getTime().toString()); 
       //Log.d(tag, "CurrentDayOfWeek :" + getCurrentWeekDay()); 
       //Log.d(tag, "CurrentDayOfMonth :" + getCurrentDayOfMonth()); 

       // Print Month 
       printMonth(month, year); 

      } 

      private String getMonthAsString(int i) { 

       return months[i]; 
      } 

      private String getWeekDayAsString(int i) { 
       return weekdays[i]; 
      } 

      private int getNumberOfDaysOfMonth(int i) { 
       return daysOfMonth[i]; 
      } 

      public String getItem(int position) { 
       return list.get(position); 
      } 

      public int getCount() { 
       return list.size(); 
      } 

      /** 
      * Prints Month 
      * 
      * @param mm 
      * @param yy 
      */ 
      private void printMonth(int mm, int yy) { 
       //Log.d(tag, "==> printMonth: mm: " + mm + " " + "yy: " + yy); 
       // The number of days to leave blank at 
       // the start of this month. 
       int trailingSpaces = 0; 
       int daysInPrevMonth = 0; 
       int prevMonth = 0; 
       int prevYear = 0; 
       int nextMonth = 0; 
       int nextYear = 0; 

       int currentMonth = mm - 1; 
       String currentMonthName = getMonthAsString(currentMonth); 
       daysInMonth = getNumberOfDaysOfMonth(currentMonth); 

       //Log.d(tag, "Current Month: " + " " + currentMonthName + " having " 
         //+ daysInMonth + " days."); 

       // Gregorian Calendar : MINUS 1, set to FIRST OF MONTH 
       GregorianCalendar cal = new GregorianCalendar(yy, currentMonth, 1); 
       //Log.d(tag, "Gregorian Calendar:= " + cal.getTime().toString()); 

       if (currentMonth == 11) { 
        prevMonth = currentMonth - 1; 
        daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth); 
        nextMonth = 0; 
        prevYear = yy; 
        nextYear = yy + 1; 
        //Log.d(tag, "*->PrevYear: " + prevYear + " PrevMonth:" 
         // + prevMonth + " NextMonth: " + nextMonth 
         // + " NextYear: " + nextYear); 
       } else if (currentMonth == 0) { 
        prevMonth = 11; 
        prevYear = yy - 1; 
        nextYear = yy; 
        daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth); 
        nextMonth = 1; 
        //Log.d(tag, "**--> PrevYear: " + prevYear + " PrevMonth:" 
         // + prevMonth + " NextMonth: " + nextMonth 
         // + " NextYear: " + nextYear); 
       } else { 
        prevMonth = currentMonth - 1; 
        nextMonth = currentMonth + 1; 
        nextYear = yy; 
        prevYear = yy; 
        daysInPrevMonth = getNumberOfDaysOfMonth(prevMonth); 
       // Log.d(tag, "***---> PrevYear: " + prevYear + " PrevMonth:" 
        //  + prevMonth + " NextMonth: " + nextMonth 
        //  + " NextYear: " + nextYear); 
       } 

       // Compute how much to leave before before the first day of the 
       // month. 
       // getDay() returns 0 for Sunday. 
       int currentWeekDay = cal.get(Calendar.DAY_OF_WEEK) - 1; 
       trailingSpaces = currentWeekDay; 

       //Log.d(tag, "Week Day:" + currentWeekDay + " is " 
       //  + getWeekDayAsString(currentWeekDay)); 
       //Log.d(tag, "No. Trailing space to Add: " + trailingSpaces); 
       //Log.d(tag, "No. of Days in Previous Month: " + daysInPrevMonth); 

       if (cal.isLeapYear(cal.get(Calendar.YEAR)) && mm == 2) { 
        ++daysInMonth; 
       } 

       // Trailing Month days 
       for (int i = 0; i < trailingSpaces; i++) { 
        //Log.d(tag, 
         // "PREV MONTH:= " 
         //   + prevMonth 
          //  + " => " 
          //  + getMonthAsString(prevMonth) 
          //  + " " 
          //  + String.valueOf((daysInPrevMonth 
          //    - trailingSpaces + DAY_OFFSET) 
          //    + i)); 
        list.add(String 
          .valueOf((daysInPrevMonth - trailingSpaces + DAY_OFFSET) 
            + i) 
          + "-GREY" 
          + "-" 
          + getMonthAsString(prevMonth) 
          + "-" 
          + prevYear); 
       } 

       // Current Month Days 
       for (int i = 1; i <= daysInMonth; i++) { 
        //Log.d(currentMonthName, String.valueOf(i) + " " 
         // + getMonthAsString(currentMonth) + " " + yy); 
        if (i == getCurrentDayOfMonth()) { 
         list.add(String.valueOf(i) + "-BLUE" + "-" 
           + getMonthAsString(currentMonth) + "-" + yy); 
        } else { 
         list.add(String.valueOf(i) + "-WHITE" + "-" 
           + getMonthAsString(currentMonth) + "-" + yy); 
        } 
       } 

       // Leading Month days 
       for (int i = 0; i < list.size() % 7; i++) { 
        //Log.d(tag, "NEXT MONTH:= " + getMonthAsString(nextMonth)); 
        list.add(String.valueOf(i + 1) + "-GREY" + "-" 
          + getMonthAsString(nextMonth) + "-" + nextYear); 
       } 
      } 

      public long getItemId(int position) { 
       return position; 
      } 

      public View getView(int position, View convertView, ViewGroup parent) { 
       View row = convertView; 
       if (row == null) { 
        LayoutInflater inflater = (LayoutInflater) _context 
          .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        row = inflater.inflate(R.layout.calendar_day_gridcell, parent, 
          false); 
       } 

       Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)) 
         .getDefaultDisplay(); 

       int height = 0; 

       if (android.os.Build.VERSION.SDK_INT >= 13) { 
        Point size = new Point(); 
        display.getSize(size); 
        height = size.y; 

       } else 
        height = display.getHeight(); 

       float scaledDensity = getApplicationContext().getResources() 
         .getDisplayMetrics().scaledDensity; 

       height = (height/((int) scaledDensity)); 

       if (calendarView.getCount() > 35) 
        height = (height - 300)/7; 
       else 
        height = (height - 300)/6; 

       RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
         RelativeLayout.LayoutParams.MATCH_PARENT, height); 

       // Get a reference to the Day gridcell 
       gridcell = (Button) row.findViewById(R.id.calendar_day_gridcell); 
       gridcell.setLayoutParams(lp); 
       //gridcell.setOnClickListener(this); 

       // ACCOUNT FOR SPACING 

       //Log.d(tag, "Current Day: " + getCurrentDayOfMonth()); 
       String[] day_color = list.get(position).split("-"); 
       String theday = day_color[0]; 
       String themonth = day_color[2]; 
       String theyear = day_color[3]; 

       // Set the Day GridCell 
       gridcell.setText(theday); 
       gridcell.setTag(theday + "-" + themonth + "-" + theyear); 

       if(dateWanted.equals(theday + "-" + themonth + "-" + theyear)) 
        gridcell.setBackgroundColor(getResources().getColor(R.color.LightGreen)); 

       //Log.d(tag, "Setting GridCell " + theday + "-" + themonth + "-" 
       //  + theyear); 

       if (day_color[1].equals("GREY")) { 
        gridcell.setTextColor(Color.LTGRAY); 
       } 
       if (day_color[1].equals("WHITE")) { 
        gridcell.setTextColor(Color.WHITE); 
       } 
       if (day_color[1].equals("BLUE")) { 
        gridcell.setTextColor(getResources().getColor(
          R.color.static_text_color)); 
       } 

       return row; 
      } 



      public int getCurrentDayOfMonth() { 
       return currentDayOfMonth; 
      } 

      private void setCurrentDayOfMonth(int currentDayOfMonth) { 
       this.currentDayOfMonth = currentDayOfMonth; 
      } 

      public void setCurrentWeekDay(int currentWeekDay) { 
       this.currentWeekDay = currentWeekDay; 
      } 

      public int getCurrentWeekDay() { 
       return currentWeekDay; 
      } 


     } 
+2

어디에서이 코드를 작업 내에 생성합니까? – Raghunandan

+0

예, 제 oncreate – dasdasd

+0

에 충돌이 발생합니다. 적어도 눈금 항목을 클릭하면 로그가 표시됩니다. 다른 두 줄의 코드를 주석 처리하고 로그 메시지를 볼 수 있는지 확인하십시오. – Raghunandan

답변

0

나는 당신의 품목보기 버튼 또는 foucus있어 다른보기를 포함 같아요. 아래와 같은 항목을보기로 descendantFocusability = "blocksDescendants": 안드로이드를 설정하려고

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

    <!-- item --> 

</RelativeLayout> 
+0

흥미 롭다. 'descendantFocusability'는 일이었습니다. 고마워요. – Eluvatar

+0

작동하지 않습니다. – dasdasd

1

나는 비슷한 문제가 있었다. 내가 해결 한 방법은 내 어댑터의 getView() 메소드에 다음 행을 추가하는 것입니다. btn.setFocusable (false); btn.setClickable (false); 여기서 btn은 버튼에 대한 참조입니다.

관련 문제