0

出力として test30 しか取得できません。

主な活動:

public class MainActivity extends Activity {
   ListView listview;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       listview = (ListView) findViewById(R.id.listView);

       Product[] items = {
               new Product("test1",07,07,2013),
               new Product("test2",07,07,2013),
               new Product("test3",07,07,2013),
       };

       ArrayAdapter<Product> adapter = new ArrayAdapter<Product>(this,
               android.R.layout.simple_list_item_1, items);

    listview.setAdapter(adapter);
       listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
           @Override
           public void onItemClick(AdapterView<?> parent, View view, int position,
                                   long id) {
               String item = ((TextView)view).getText().toString();
               Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();
           }
       });
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       // Inflate the menu; this adds items to the action bar if it is present.
       getMenuInflater().inflate(R.menu.main, menu);
       return true;
   }     
}

製品.java

public class Product {
    static String name;
    static int day;
    static int month;
    static int year;
    static String res; 

    public Product(){
        super();
    }

    public Product(String name, int day, int month, int year) {
        super();
        this.name = name;
        this.day = day;
        this.month = month;
        this.year = year;

        Calendar thatDay = Calendar.getInstance();
        thatDay.set(Calendar.DAY_OF_MONTH,this.day);
        thatDay.set(Calendar.MONTH,this.month-1); // 0-11 so 1 less
        thatDay.set(Calendar.YEAR, this.year);

        Calendar today = Calendar.getInstance();

        long diff =thatDay.getTimeInMillis()- today.getTimeInMillis(); //result in millis
        long days = diff / (24 * 60 * 60 * 1000);
            res=String.valueOf(days);
        }

    @Override
    public String toString() {
        return this.name+this.res ;
    }
}
4

2 に答える 2

0

あなたの間違いは、(上記のコードから読んだこと)すべてのフィールドが静的であることです(つまり、クラスごとに1回であり、オブジェクトごとに1回ではありません)。これにより、作成したコンストラクター呼び出しがonCreateまったく役に立たなくなります。代わりに、各製品に一意の名前が付けられ、毎回 Product.name が上書きされるためです。

       Product[] items = {
           new Product("test1",07,07,2013), // Product.name = "test1"
           new Product("test2",07,07,2013), // Product.name = "test2"
           new Product("test3",07,07,2013), // Product.name = "test3"
       }

フィールドを非静的 (そしておそらく非公開) にすると、問題は解決するはずです。

edit1: 静的/非静的フィールドの詳細については、http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html にアクセスしてください

edit2: 名前の後ろのゼロは意図したとおりである必要があります。今日と今日の違いはゼロであるため、異なる日でテストする必要があります;-)

于 2013-07-07T20:34:46.207 に答える