- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
代码是:
private static final int FIRST_DAY_OF_WEEK = Calendar.MONDAY;
private final Calendar calendar;
public final CalendarItem today;
private final CalendarItem selected;
private final LayoutInflater inflater;
//added
public static CalendarItem eventDate;
//added
private CalendarItem[] days;
Context context;
private List<Events> eventList;
private String dateRetrived;
private String dataRetrived;
private int d;
private int day1;
private String dayS;
private String intMonth;
private String year;
private List<Events> eventList1;
private String dateRetrived1;
private String dataRetrived1;
private Date date1;
private List<Events> dateListInDb;
private String dateOfEvent;
public CalendarAdapter(Context context, Calendar monthCalendar) {
calendar = monthCalendar;
today = new CalendarItem(monthCalendar);
selected = new CalendarItem(monthCalendar);
eventDate = new CalendarItem(monthCalendar);
calendar.set(Calendar.DAY_OF_MONTH, 1);
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.context = context;
}
public int getCount() {
return days.length;
}
public Object getItem(int position) {
return days[position];
}
public long getItemId(int position) {
final CalendarItem item = days[position];
if (item != null) {
return days[position].id;
}
return -1;
}
@SuppressLint("SimpleDateFormat")
@SuppressWarnings("static-access")
public View getView(int position, View view, ViewGroup parent) {
if (view == null) {
view = inflater.inflate(R.layout.calender_item, null);
}
Toast.makeText(context, "view starts ", Toast.LENGTH_SHORT).show();
final TextView dayView = (TextView)view.findViewById(R.id.date);
final CalendarItem currentItem = days[position];
method();
Toast.makeText(context, "out ", Toast.LENGTH_SHORT).show();
//for now any date... event dates will be taken from DB..
if (currentItem == null) {
dayView.setClickable(false);
dayView.setFocusable(false);
view.setBackgroundDrawable(null);
dayView.setText(null);
} else {
if(currentItem.equals(today)) {
view.setBackgroundResource(R.drawable.today_background);
}
else if (currentItem.equals(selected)) {
view.setBackgroundResource(R.drawable.selected_background);
// Toast.makeText(context, "tapped",Toast.LENGTH_LONG).show();
} else {
view.setBackgroundResource(R.drawable.calnormalmdpi1);
}
dayView.setText(currentItem.text);
}
return view;
}
private void method() {
DatabaseManager db = new DatabaseManager(context);
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
dateListInDb = db.getAllDates();
Iterator<Events> iter = dateListInDb.iterator();
for (int j = 0 ; j < dateListInDb.size() ; j++) {
Toast.makeText(context, "loop starts " + j, Toast.LENGTH_SHORT).show();
Events dateOfEvent = iter.next();
String dateOfEventSingle = dateOfEvent.getDateOfEvent();
try {
date1 = formatter.parse(dateOfEventSingle);
dayS = (String) android.text.format.DateFormat.format("dd", date1);
intMonth = (String) android.text.format.DateFormat.format("MM", date1); //06
year = (String) android.text.format.DateFormat.format("yyyy", date1);
eventDate = new CalendarItem(Integer.parseInt(year), Integer.parseInt(intMonth)-1,Integer.parseInt(dayS));
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Toast.makeText(context, "loop ends " + j, Toast.LENGTH_SHORT).show();
//i = false;
}
}
public final void setSelected(int year, int month, int day) {
selected.year = year;
selected.month = month;
selected.day = day;
notifyDataSetChanged();
}
public final void refreshDays() {
final int year = calendar.get(Calendar.YEAR);
final int month = calendar.get(Calendar.MONTH);
Toast.makeText(context, "Date : " + month, Toast.LENGTH_SHORT).show();
final int firstDayOfMonth = calendar.get(Calendar.DAY_OF_WEEK);
final int lastDayOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
final int blankies;
final CalendarItem[] days;
if (firstDayOfMonth == FIRST_DAY_OF_WEEK) {
blankies = 0;
} else if (firstDayOfMonth < FIRST_DAY_OF_WEEK) {
blankies = Calendar.SATURDAY - (FIRST_DAY_OF_WEEK - 1);
} else {
blankies = firstDayOfMonth - FIRST_DAY_OF_WEEK;
}
days = new CalendarItem[lastDayOfMonth + blankies];
for (int day = 1, position = blankies; position < days.length; position++) {
days[position] = new CalendarItem(year, month, day++);//added dates
}
this.days = days;
notifyDataSetChanged();
}
public static class CalendarItem {
public int year;
public int month;
public int day;
public String text;
public long id;
public CalendarItem(Calendar calendar) {
this(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
}
public CalendarItem(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
this.text = String.valueOf(day);
this.id = Long.valueOf(year + "" + month + "" + day);
}
@Override
public boolean equals(Object o) {
if (o != null && o instanceof CalendarItem) {
final CalendarItem item = (CalendarItem)o;
return item.year == year && item.month == month && item.day == day;
}
return false;
}
} }
最佳答案
引用 Android 工程师 RomainGuy
This is not an issue, there is absolutely no guarantee on the order in which getView() will be called nor how many times.
因此,您能处理的最好方法就是正确地重新使用现有 View (行布局)。
这是另一篇好文章。
来源:ListView - getView is called too much times
http://developer.android.com/reference/android/widget/GridView.html - 正如您在这里所看到的,GridView 是某种 ListView。它扩展了 AbsListView,所以我打赌工作流程有点相同。
关于java - 为什么 getView() 方法会自动调用多次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19426370/
我想要自定义微调器,在下拉列表中包含图像和 TextView ,因此我创建了不同的布局并对其进行了膨胀,其工作正常,但对于按微调器之前的微调器布局,我只想有一个类似“选择”的文本来自列表”但是当我用
所以我正在开发实时 ListView ,我需要 ListView 在单击按钮时更新,这些也是如此: private void ReloadData(){ DataList.clear();
我知道其他人也问过这个问题,但我看过其他解决方案,但仍然无法使其发挥作用。 适配器代码: private class CustomTextAndImageAdapter extends ArrayAd
我有一个通过 asynctask 填充的自定义 ListView 适配器,我在 onprogress 函数中调用 notificationdatasetchanged,并且 getCount() 返回
我正在显示联系人列表。一切都很好,除了设备有 1620 个联系人,所以列表滚动非常慢,甚至有时会挂起。 请帮帮我。 我尝试使用检查 ConvertView!=null 的 getView 方法,但它总
我想在每张图片下方添加一个文本,这是我的实际代码: @Override public View getView(int position, View convertView, ViewGroup pa
我在 Adapter extensions override of getView 中经常看到这一点: @Override public View getView(int position,
我正在尝试在对话框中制作 ListView 。但是我的适配器中的 getView 函数永远不会被调用。有什么想法吗? 适配器: public class DialogAdapter extends B
我有 public class MainActivity extends FragmentActivity 我编写了实现 AsyncResponse 的 Loader 类: public class
我有这样一段代码:)我想编辑我的自定义首选项布局的文本属性。但是从 getView 函数对对象所做的任何更改都不会影响首选项屏幕中的实际列表。有任何想法吗?我知道我不能扩展 PreferenceScr
我有一个扩展 simplecursoradapter 的适配器。新 View 应该从数据库中获取光标和图像,用几个复选框填充列表。出于某种原因,我似乎看不到,我的 getView 甚至没有被调用。我在
谁能解释一下这两种 getView() 实现之间的区别是什么? 第一个简单地检查 convertView 是否为 null;如果它为 null,则膨胀一个新的 View 对象。然后给子View设置合适
我做了一个 SingleItemAdapter extends ArrayAdapter,这个定制的 Adapter 用于 ListView。 在这个 SingleItemAdapter 中,我做了一
这里是相当新的 Android 开发者。 我遇到了一个奇怪的问题,我不确定如何解决。我在这里阅读了很多问题,听起来它们与我遇到的问题相同,但他们问题的解决方案似乎永远不适用于这里发生的事情。 我使用扩
我有一个带有 ListFragment 的自定义适配器,但根本没有调用适配器 getView()。 这是适配器的样子 - public class ModuleListItemAdapter exte
我正在将自定义 SimpleCursorAdapter 设置为 ListView。出于某种原因,对于数据库中的每个项目,FriendAdapter 的 getView() 被调用两次。经过一些调查(我
我有一个包含自定义适配器和自定义行的列表。 问题是当我滚动 ListView 时,图像位于错误的位置... 这是自定义行 xml: 这是 GetView: List it
public View getView(int index, View view, ViewGroup parent){ if (view == null) { // for the firs
我添加了两个按钮(添加和删除)来控制 ListView ,当我删除一个项目时,该项目不会立即在 ListView 中消失,只有当我在 ListView 上滑动时,新项目才会消失。除非我触摸屏幕或在 L
我已经多次尝试在我的 Controller 上使用 this.getView(),但我总是在我的控制台上收到 getView is not a function 错误。 是否有任何“技巧”或我可以做的
我是一名优秀的程序员,十分优秀!