0

我试图在 GridView 中获取选定的项目,但是当我单击项目时,没有任何反应。

我没有从我的日志代码中得到任何日志: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;
            }


        }
4

2 回答 2

1

我有一个类似的问题。我解决它的方法是将以下几行添加到我的适配器中的 getView() 方法中: btn.setFocusable(false); btn.setClickable(false); 其中 btn 是对按钮的引用。

于 2014-03-10T08:18:42.093 回答
0

我猜您的项目视图包含按钮或其他获得焦点的视图。尝试将 android: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>
于 2013-08-16T15:43:21.887 回答