Android / Java - 将使用getDate()检索的long值传递给另一个Method

时间:2016-01-15 10:15:33

标签: java android methods long-integer

我有一个用于CalendarView的OnDateChangeListener,它应该获取所选日期并将其保存为长值。

CalendarView calendar = (CalendarView) findViewById(R.id.calendarView);
calendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
            @Override
            public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
                CalendarView calendar = (CalendarView) findViewById(R.id.calendarView);
                long selectedDate = calendar.getDate();}


        });

然后我有一个浮动操作按钮,它应该启动另一个活动并传递所选日期的长值,OnDateChangeListener将Intent带到下一个Activity。

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                /*CalendarView calendar = (CalendarView) findViewById(R.id.calendarView);
                long selectedDate = calendar.getDate();*/

                Intent intent = new Intent(getApplicationContext(), AddEvent.class);
                intent.putExtra("selectedDate", selectedDate);
                startActivity(intent);
            }
        });

值被格式化并显示在下一个活动中并保存到我的领域数据库中。

如何使此活动中的所有方法都可以访问此长值?

3 个答案:

答案 0 :(得分:1)

只需在方法中声明变量'selectedDate'全局而不是本地,然后您的活动的每个方法都可以访问它。

答案 1 :(得分:1)

像这样创建一个全局变量:

public class MyClass extends Activity{

    private Long mSelectedDate; 
    ...

在日历更改侦听器中初始化它:

calendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
    @Override
    public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
        CalendarView calendar = (CalendarView) findViewById(R.id.calendarView);
        mSelectedDate = calendar.getDate();
     }
});

然后,在您的FAB中使用它:

fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        Intent intent = new Intent(getApplicationContext(), AddEvent.class);
        intent.putExtra("selectedDate", mSelectedDate );
        startActivity(intent);
    }
});

答案 2 :(得分:0)

首先,声明CalendarView两次是不需要做的工作。您可以简单地将初始CalendarView声明为final,并以此方式使用它。

或者,由于此特定函数实际上将您自己作为函数中的参数,因此您应该使用它。

  

public void onSelectedDayChange(CalendarView视图,int year,int   月,int dayOfMonth){

至于您的实际问题,您只需制作CalendarView或长member variable of your class

示例:

class MyClass {
    // Member Variable
    private long mMemberVariable = 0l;

    // Constructor
    public MyClass() {
        foo();
        bar();
    }

    private void foo() {
        mMemberVariable = 1l;
    }

    private void bar() {
        System.out.println("Your variable is "+mMemberVariable);
    }
}