内部类为外部变量赋值

这是一个根据datePicker计算输入日期与系统日期差的例子

输入日期的取得是个问题

xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <DatePicker
        android:id="@+id/dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:calendarViewShown="false" />

    <TextView
        android:id="@+id/tv_dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="选择的日期为" />

    <TimePicker
        android:id="@+id/tp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal" />

    <TextView
        android:id="@+id/tv_tp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="选择的时间为" />

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="试试看" />

</LinearLayout>

MainActivity

package com.example.dptp;

import java.util.Calendar;
import java.util.Date;

import android.os.Bundle;
import android.R.integer;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;

public class MainActivity extends Activity
{

	private TimePicker mTimePicker;
	private DatePicker mDatePicker;
	private TextView tpTextView;
	private TextView dpTextView;
	int userYear = 0;
	int userMonth = 0;
	int userDay = 0;

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mTimePicker = (TimePicker) findViewById(R.id.tp);
		mDatePicker = (DatePicker) findViewById(R.id.dp);
		tpTextView = (TextView) findViewById(R.id.tv_tp);
		dpTextView = (TextView) findViewById(R.id.tv_dp);

		// 获得系统当前的年月日
		Calendar today = Calendar.getInstance();
		today.setTime(new Date());
		int sYear = today.get(Calendar.YEAR);
		int sMonth = today.get(Calendar.MONTH);
		int sDay = today.get(Calendar.DAY_OF_MONTH);
		System.out.println("==================当前系统的年月日" + sYear + (sMonth + 1)
				+ sDay);

		// 获取用户输入的年月日
		Calendar calendar = Calendar.getInstance();
		int year = calendar.get(Calendar.YEAR);
		int month = calendar.get(Calendar.MONTH);
		int day = calendar.get(Calendar.DAY_OF_MONTH);

		System.out.println("======================输入的年月日(应该是错误的)"
				+ (year + month + 1) + day);

		mDatePicker.init(year, month, day, new OnDateChangedListener()
		{

			@Override
			public void onDateChanged(DatePicker view, int year,
					int monthOfYear, int dayOfMonth)
			{
				dpTextView.setText("选择的日期是: " + year + (monthOfYear + 1)
						+ dayOfMonth);
				System.out.println("datePicker.init方法中的年月日: " + year
						+ (monthOfYear + 1) + dayOfMonth);
				userYear = year;
				userMonth = monthOfYear + 1;
				userDay = dayOfMonth;
			}

		});

		System.out.println("======================输入的年月日(应该是正确的)" + userYear
				+ userMonth + userDay);

		Button button = (Button) findViewById(R.id.btn);
		button.setOnClickListener(new OnClickListener()
		{

			@Override
			public void onClick(View v)
			{
				// TODO Auto-generated method stub
				System.out
						.println("======================在button中获取的输入的年月日(应该是正确的)"
								+ userYear + userMonth + userDay);
			}
		});

		// 计算相差的时间
		Calendar birthday = Calendar.getInstance();
		birthday.set(year, (month + 1), day);

		long diff = today.getTimeInMillis() - birthday.getTimeInMillis();
		long days = diff / (24 * 60 * 60 * 1000);
		System.out.println("===========相差的天数为" + days);
		mTimePicker.setOnTimeChangedListener(new OnTimeChangedListener()
		{

			@Override
			public void onTimeChanged(TimePicker view, int hourOfDay, int minute)
			{
				tpTextView.setText("选择的时间是 " + hourOfDay + minute);
			}

		});

	}

}

可以看到,日期监听器的init内部是个void方法,这下去求,用户设置的日期都在这个void方法里面,怎么取。

我最开始在外面声明了全局变量,想着方法里面赋值了吧,然后输出就能看到了吧,不行。

因为这个时候,你还没有输入日期,还没有触发点击事件。

感谢QQ群里不认识的好心人指点,将近4个小时之后,提供了2个方法:

1 既然你没有确定日期输入完毕的方法,就建立个button ,在其监听器里面去取,因为当你点选日期完毕就已经赋值完成,但是你在onCreat方法里面取永远都是取的未点击日期时候的值,也就是上面的方法,成功了。

2 在内部类外建立数组或者集合,需要使用的话,就传递他们。未实验


转载于:https://my.oschina.net/mutouzhang/blog/210172

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值