我已经为 android times square 实现了代码,但我无法在月份更改时检测到该事件。 我必须突出显示月份的多个日期范围。
这是我的做法,但是,我无法在滚动时检测到月份何时更改
代码:
public class Calender extends Activity implements OnDateChangeListener,CalendarCellDecorator {
String BOOKING_URL="http://www.example.com/app/webroot/mobile/booking.php";
ArrayList<String>list=new ArrayList<String>();
CalendarPickerView calender;
ArrayList<Date> dates = new ArrayList<Date>();
Calendar lastYear,nextYear;
Calendar today;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calender);
getActionBar().setTitle("CALENDER");
getActionBar().setIcon(R.drawable.back);
getActionBar().setDisplayOptions(getActionBar().getDisplayOptions()| ActionBar.DISPLAY_SHOW_CUSTOM);
ImageView imageView = new ImageView(getActionBar().getThemedContext());
imageView.setScaleType(ImageView.ScaleType.CENTER);
imageView.setImageResource(R.drawable.manu_btn);
ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT,ActionBar.LayoutParams.WRAP_CONTENT, Gravity.RIGHT| Gravity.CENTER_VERTICAL);
layoutParams.rightMargin = 40;
imageView.setLayoutParams(layoutParams);
getActionBar().setCustomView(imageView);
centerActionBarTitle();
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
nextYear = Calendar.getInstance();
nextYear.add(Calendar.YEAR, 2);
lastYear= Calendar.getInstance();
lastYear.add(Calendar.YEAR, -2);
today = Calendar.getInstance();
calender = (CalendarPickerView) findViewById(R.id.calendar);
calender.setOnScrollListener(new OnScrollListener() {
private int mLastFirstVisibleItem;
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if(mLastFirstVisibleItem<firstVisibleItem)
{
Log.d("SCROLLING DOWN","TRUE");
}
if(mLastFirstVisibleItem>firstVisibleItem)
{
Log.d("SCROLLING UP","TRUE");
}
mLastFirstVisibleItem=firstVisibleItem;
}
});
calender1.init(lastYear.getTime(), nextYear.getTime());//.inMode(SelectionMode.RANGE);
new MyAsyncTask(BOOKING_URL).execute();
}
.....
try {
JSONArray array=new JSONArray(response);
for (int i = 0; i < array.length(); i++) {
JSONObject json=array.getJSONObject(i);
list.add(json.getString("fromDate")+" "+json.getString("toDate"));
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
TimeZone gmt = TimeZone.getTimeZone("GMT");
sdf.setTimeZone(gmt);
sdf.setLenient(false);
try {
Date date = sdf.parse(list.get(0).split(" ")[0]);
Date date1 = sdf.parse(list.get(0).split(" ")[1]);
System.out.println(date);
dates.add(date);
dates.add(date1);
} catch (Exception e) {
e.printStackTrace();
}
calendar.init(lastYear.getTime(), nextYear.getTime()).inMode(SelectionMode.RANGE).withSelectedDates(dates);
} catch (JSONException e) {
e.printStackTrace();
}
....
@Override
public void decorate(CalendarCellView calendarCellView, Date date) {
Log.d("TAG", "a"+date);
if (date.getDate() < 5) {
calendarCellView.setBackgroundResource(R.drawable.side_testi);
} else {
calendarCellView.setBackgroundResource(R.drawable.side_book);
}
}
json 响应:
[
{
"fromDate": "2014-03-03",
"toDate": "2014-03-07",
"name": "Anurag",
"email": "anuragk.evs@gmail.com",
"phone": "2147483647",
"address": "Y-51, 3rd Floor, Sector 12",
"comment": "I wanna view here."
},
{
"fromDate": "2014-04-09",
"toDate": "2014-04-09",
"name": "Dana Edgar",
"email": "danae@bhmconstruction.com",
"phone": "0",
"address": "BHM Construction Inc.\r\n522 Walnut Avenue\r\nVallejo, CA 94592",
"comment": "Primary guest will be Jeffery Mazet and his contact phone number is (530)601-0570. His email is jeffm@bhmconstruction.com."
},
{
"fromDate": "2015-02-09",
"toDate": "2015-02-25",
"name": "Ghfb",
"email": "testxzy@gmail.com",
"phone": "2147483647",
"address": "\nGffbbnn",
"comment": "Dhgbngh"
},
{
"fromDate": "2015-02-09",
"toDate": "2015-02-25",
"name": "Ghfb",
"email": "testxzy@gmail.com",
"phone": "2147483647",
"address": "\nGffbbnn",
"comment": "Dhgbngh"
},
{
"fromDate": "2015-06-04",
"toDate": "2015-09-04",
"name": "rewr",
"email": "manish@gmail.com",
"phone": "2147483647",
"address": "cbvcb",
"comment": "vnbvbbm"
}
]
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:orientation="vertical" >
<com.squareup.timessquare.CalendarPickerView
android:id="@+id/calendar"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingBottom="16dp"
android:scrollbarStyle="outsideOverlay"
android:clipToPadding="false"
android:background="#FFFFFF"
/>
</LinearLayout>
提出的问题
看来我错过了什么。任何建议表示赞赏。
最佳答案
使用 CalendarCellDecorator 你可以这样写:
public class MonthDecorator implements CalendarCellDecorator {
@Override
public void decorate(CalendarCellView calendarCellView, Date date) {
if (date.getDate() < 5) {
calendarCellView.setBackgroundResource(R.drawable.red_background);
} else {
calendarCellView.setBackgroundResource(R.drawable.blue_background);
}
}
}
这是一个简单的示例 - 每个月的前 5 天的背景与其余几天不同。每个月的每个单元格都会通过装饰器,因此您可以使用它来更改多个月单元格的 UI。
通常,您必须存储应突出显示的日期 CalendarCellDecorator 并在 decorate 方法中检查给定的 cellView 是否显示这些日期之一。在我的例子中,我只是检查日期是否在 5 号之前,但您可以在那里进行更有意义的检查 - 例如,提供日期范围并检查给定日期是否在此范围内。
编辑:显示如何应用装饰器:
calendar.init(lastYear.toDate(), nextYear.toDate()).inMode(CalendarPickerView.SelectionMode.RANGE);
List<CalendarCellDecorator> decoratorList = new ArrayList<>();
decoratorList.add(new MonthDecorator());
calendar.setDecorators(decoratorList);
关于android - 在 android 时代广场的月份滚动中检测监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29764521/
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
如何在Ruby的if语句中检查bash命令的返回值(true/false)。我想要这样的东西,if("/usr/bin/fswscell>/dev/null2>&1")has_afs="true"elsehas_afs="false"end它会提示以下错误含义,它总是返回true。(irb):5:warning:stringliteralincondition正确的语法是什么?更新:/usr/bin/fswscell寻找afs安装和运行状态。它会抛出这样的字符串,Thisworkstationbelongstocell如果afs没有运行,命令以状态1退出 最
我需要formtastic来仅显示月份和年份字段,而不显示日期字段。日期选择器很好,但它显示了整个日历。我不想要日期选择器。f.input:accounting_month,:label=>"会计月份",:as=>:datepicker我只需要月份和年份。 最佳答案 有一种方法可以做到这一点:"Accountingmonth",:order=>[:month,:year]这将自动隐藏“天”输入并为其指定默认值1。 关于ruby-on-rails-Rails3Formtastic。如何让f
这是我在ChefRecipe中的一blockRuby:#ifdatadirdoesn'texist,moveoverthedefaultoneif!File.exist?("/vol/postgres/data")execute"mv/var/lib/postgresql/9.1/main/vol/postgres/data"end结果是:Executingmv/var/lib/postgresql/9.1/main/vol/postgres/datamv:inter-devicemovefailed:`/var/lib/postgresql/9.1/main'to`/vol/post
在Rails中,什么是集成更新模型某些元素的UDP监听过程的最佳方式(特别是它将向其中一个表添加行)。简单的答案似乎是在同一个进程中使用UDP套接字对象启动一个线程,但我什至不清楚我应该在哪里做适合Rails方式的事情。有没有一种巧妙的方法来开始收听UDP?具体来说,我希望能够编写一个UDPController并在每个数据报消息上调用一个特定的方法。理想情况下,我希望避免在UDP上使用HTTP(因为它会浪费一些在这种情况下非常宝贵的空间),但我完全控制消息格式,因此我可以为Rails提供它需要的任何信息。 最佳答案 Rails是一个
我正在尝试检索以base64编码格式接收的图像的内容类型和文件名。这是使用base64编码图像执行POST请求的代码require'net/http'require"rubygems"require'active_support'url=URI.parse('http://localhost:3000/')image=ActiveSupport::Base64.encode64(open("public/images/rails.png").to_a.join)post_params={'image'=>image}Net::HTTP.post_form(url,post_params
我正在使用Rails3.1。这是我的代码,要求用户输入信用卡到期月份和年份。以上代码有效。但是,问题是如果出现验证错误,则会重置所选的到期时间和月份。我试过f.select_month但不支持。 最佳答案 尝试这样的事情:true,:start_year=>Date.today.year,:end_year=>(Date.today.year+10),:use_month_numbers=>true%> 关于ruby-on-rails-如何显示信用卡的月份和年份选择,我们在StackOv
我目前正在学习RoR,我想我一定是误解了什么。我有一个ActiveRecord类调用User,对:name和:email进行简单验证,例如presence:true、length:{maximum:15}等。我想我会在控制台中检查验证。我进入Rails控制台(开发环境),并创建一个名称太长的新实例,例如user_instance=User.new(名称:“aaaaabbbbbcccccdddddd”,电子邮件:“”)。验证不会抛出任何错误。当我尝试user_instance.save时,记录不会写入数据库,所以在那个阶段它显然工作正常。我做错了什么? 最佳答
因此,我们的页面中有以下代码:OnOff这是2个单选按钮。'开和关'。“关闭”是默认值。使用Watir-webdriver和Ruby,我们想要选择“打开”单选按钮。我们这样做:browser.radio(:id=>"HasRegistration_true").set但在这样做时,我们得到以下错误:`WebElement.clickElement':Elementcannotbescrolledintoview:[objectHTMLInputElement](Selenium::WebDriver::Error::MoveTargetOutOfBoundsError)我们知道Sele
我知道一些检查参数是否为零的方法ifparam[:some_value]ifparam[:some_value].present?if!param[:some_value].nil?#unlessparam[:some_value].nil?if!param[:some_value].blank?#unlessparam[:some_value].blank?哪一个是正确的并且最受欢迎?它们之间有什么区别?我宁愿使用ifparam[:some_value]因为它最简单也最短。 最佳答案 以下是nil?、blank?和present?