0

私のアプリケーションでは、3つのテキストビューを水平に配置しています。1番目の前の画像、2番目の日付、3番目の次の画像です。1番目のテキストビューをクリックすると、前の月が表示されます(印刷)。もう一度クリックすると、次の画像に移動します。今月の前月2日でこれが続くはずですが、2回目をクリックすると前月1日が来ます。逆戻りしません。助けてください。よろしくお願いします。

これは私のコードです:

prvmon.setOnClickListener(new View.OnClickListener() 
    {       
        @Override
        public void onClick(View arg0) 
        {
            // TODO Auto-generated method stub
            System.out.println("Inside left");
            TextView date=(TextView)findViewById(R.id.date);
            Calendar cal= Calendar.getInstance();
            cal.add(cal.MONTH,-1);
            Date date1=cal.getTime();
            System.out.println("sssssss="+date1);
            cal.setTime(date1);
            SimpleDateFormat month_date = new SimpleDateFormat("MMMMM yyyy");
            String month_name = month_date.format(cal.getTime());  
            date.setText(month_name);   
        }
    });
4

3 に答える 3

1

その理由は、毎回 Calender インスタンスを初期化しているためです。したがって、現在の日付/時刻のインスタンスを取ります。したがって、一度初期化してから再度使用することをお勧めします。グローバルに宣言し、 で初期化しonCreate()ます。

Calendar calendar = null;

protected void onCreate(Bundle savedInstanceState){

calendar = Calendar.getInstance();
...
}

ここで、イベントでこのカレンダー インスタンスを使用しますonClick()

于 2012-07-31T12:56:05.233 に答える
0

完全な例が役立つかもしれません:

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

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MonthActivity extends Activity {

    private Calendar calendar;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.test);

        calendar = Calendar.getInstance();
        calendar.setTime(new Date());

        final TextView textView = (TextView) findViewById(R.id.dateTextView);
        updateTextView(textView);

        Button prev = (Button) findViewById(R.id.prevCmd);
        prev.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                calendar.add(Calendar.MONTH, -1);
                updateTextView(textView);

            }
        });

        Button next = (Button) findViewById(R.id.nextCmd);
        next.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                calendar.add(Calendar.MONTH, 1);
                updateTextView(textView);

            }
        });
    }

    private void updateTextView(TextView textView) {
        textView.setText(""
                + calendar.getDisplayName(Calendar.MONTH, Calendar.SHORT,
                        Locale.getDefault()));

    }
}

およびレイアウトXMLファイル

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativeLayout12"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <Button
        android:id="@+id/prevCmd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text=" &lt; " />

    <TextView
        android:id="@+id/dateTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/nextCmd"
        android:layout_toRightOf="@+id/prevCmd"
        android:gravity="center_vertical|center_horizontal"
        android:paddingTop="8dp"
        android:text="Jul"
        android:textColor="#ffffff"
        android:textSize="20dp"
        android:textStyle="bold" />

    <Button
        android:id="@+id/nextCmd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text=" > " />

</RelativeLayout>
于 2012-07-31T13:08:31.643 に答える
0
Date date1=cal.getTime();

常に同じ時刻に設定し、「過去にちょうど 1 か月さかのぼります」。そのため、onClick の外で日付 date1=cal.getTime() を定義するか、onClick() の最後で値をインクリメントするなどして、減算する必要がある月数を追跡します。

編集:

わかりましたので、コードをもう一度見てみましょう

final int clicks = 0; //we'll use this to track clicks
prvmon.setOnClickListener(new View.OnClickListener() 
{       
    @Override
    public void onClick(View arg0) 
    {
        int monthsToGo = --clicks;
        // TODO Auto-generated method stub
        System.out.println("Inside left");
        TextView date=(TextView)findViewById(R.id.date);
        Calendar cal= Calendar.getInstance();
        cal.add(cal.MONTH, monthsToGo); //now it'll deduce -1 then -2 etc...
        Date date1=cal.getTime();
        System.out.println("sssssss="+date1);
        cal.setTime(date1);
        SimpleDateFormat month_date = new SimpleDateFormat("MMMMM yyyy");
        String month_name = month_date.format(cal.getTime());  
        date.setText(month_name);   
    }
});
于 2012-07-31T12:51:27.910 に答える