アプリ作って海外移住

コピペプログラマーのメモ

BookAdapter extends ArrayAdapter<Book>   getView が行数より多く呼ばれる

getView が行数より多く呼ばれる

 

 

ListAdapter の getView メソッドが、行数より多く呼ばれることがありました。

行数分呼ぶための対処法を先に言うと
ListView の layout_height は match_parent にしなければならない。
と言うことらしいです。
ちなみに、layout_width の方は関係ないようでした。

cellではなく親レイアウトをmatch_parent

 

 

 

 

 

 

 

 

 

public class MainActivity extends Activity {
   
   
   

   

   

   

   

    private static  int TODAY_YYYY;
    private static  int TODAY_MM;
    private static  int TODAY_DD;
    private static  int TODAY_WD;
    private static  int TODAY_DTBCNT;
    private static  int TARGET_YYYY;
    private static  int TARGET_MM;
    private static  int TARGET_DD;
    private static  int TARGET_WD;
    private static  int TARGET_STACNT;
    private static  int TARGET_ENDCNT;
    private ArrayList<Book> list_data = new ArrayList<Book>();
   
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_list);
   
        prev_click();
       
        //データベースヘルパーのインスタンスを作成する
        DatabaseHelper dbHelper = new DatabaseHelper(this);
        //データベースopen
        SQLiteDatabase db = dbHelper.getWritableDatabase();
   
        Calendar cal = Calendar.getInstance(); 
        TODAY_YYYY = cal.get(Calendar.YEAR);
        TODAY_MM = cal.get(Calendar.MONTH);
        TODAY_DD = cal.get(Calendar.DATE);
   
        TARGET_YYYY = TODAY_YYYY;
        TARGET_MM = TODAY_MM;
        TARGET_DD  = TODAY_DD;
   
   
    }
   
   
         
    @Override
    protected void onResume(){
         super.onResume();
        Log.v("onResume started","****************");
                       ////////////////////TARGET_YYYY MM DD からリスト作成
       
    target_cnt_calc();   // TARGET_STACNT  TARGET_ENDCNT レコード位置計算
   
   
   
       
       

             // DBオープン
                  //データベースヘルパーのインスタンスを作成する
                 DatabaseHelper dbHelper = new DatabaseHelper(this);
                 //データベースオブジェクトを取得する  書き込み可能 で
                 SQLiteDatabase db = dbHelper.getWritableDatabase(); 
                 Cursor cursor = null;
                
                 String columns = new String{"_id","dtb_cnt","dtb_yyyy",
                         "dtb_mm" ,
                         "dtb_dd ",
                         "dtb_accent",
                         "dtb_saiflg",
                         "dtb_sainm",
                         "dtb_daia",             
                         "dtb_daia_stahh",
                         "dtb_daia_stamm",
                         "dtb_daia_endhh",
                         "dtb_daia_endmm",
                         "dtb_y1",             
                         "dtb_y1_stahh",
                         "dtb_y1_stamm",
                         "dtb_y1_endhh",
                         "dtb_y1_endmm",
                         "dtb_y2"};
                
                
               
                 cursor = db.query( "dtb",
                         columns,
                         "dtb_yyyy =?" + " and "  +"dtb_mm =?",
                         new String[]{ "" + TARGET_YYYY,""+TARGET_MM },
                         null, null, "dtb_cnt" );

                
                
                 cursor.moveToFirst();     
                 int i;
                 int numRows = cursor.getCount();
                   for( i = 0; i < numRows; i++ ){
                      // 検索結果をCursorから取り出す
                     
                      /* list_data.add(new Book(cursor.getInt(0),
                               cursor.getString(7)
                               ));
                       */
                      
                       list_data.add(new Book(cursor.getInt(0),
                               cursor.getInt(1),
                               cursor.getInt(2),
                               cursor.getInt(3),
                               cursor.getInt(4),
                               cursor.getInt(5),
                               cursor.getInt(6),
                               cursor.getString(7),
                               cursor.getString(8),
                               cursor.getInt(9),
                               cursor.getInt(10),
                               cursor.getInt(11),
                               cursor.getInt(12),
                               cursor.getString(13),
                               cursor.getInt(14),
                               cursor.getInt(15),
                               cursor.getInt(16),
                               cursor.getInt(17),
                               cursor.getString(18)));
                      
                     
                   
                     cursor.moveToNext();
                   }
             
                 // Cursorを忘れずにcloseする
               
                     cursor.close();

                     ListView lv = (ListView)this.findViewById(R.id.listView1);
                     BookAdapter adapter = new BookAdapter(
                              this,
                              R.layout.list_cell, // 1行分のレイアウトファイル
                              0,  // 上記レイアウト内のテキスト表示箇所のId
                              list_data             // 表示対象のデータ
                              );
                            lv.setAdapter(adapter);
   
   
    }
   
    public class BookAdapter extends ArrayAdapter<Book> {
          private int mResource;
          private int mFieldId;
          private LayoutInflater mInflater;
         
          public BookAdapter(Context context, int resource,
              int textViewResourceId, List<Book> objects) {
            super(context, resource, textViewResourceId, objects);

            // initialize
            mResource = resource;
            mFieldId = textViewResourceId;
            mInflater = (LayoutInflater)context.getSystemService(
                Context.LAYOUT_INFLATER_SERVICE);
          }

          public View getView(int position, View convertView,
                  ViewGroup parent) {
                View view;
               // TextView text;
               // TextView text2;
                view = mInflater.inflate(mResource, parent, false);
               /* if (convertView == null) {
                  view = mInflater.inflate(mResource, parent, false);
                } else {
                  view = convertView;
                }*/

               /* try {
                    TextView text = (TextView)view.findViewById(R.id.txtBookName);
                    TextView text2 = (TextView)view.findViewById(R.id.txtBookId);
                } catch (ClassCastException e) {
                  Log.e("BookAdapter",
                    "You must supply a resource ID for a TextView");
                  throw new IllegalStateException(
                    "BookAdapter requires the resource ID to be a TextView", e);
                }
                */
                TextView tvdd = (TextView)view.findViewById(R.id.tvdd);
                //TextView text2 = (TextView)view.findViewById(R.id.txtBookId);
               
                Book book = this.getItem(position);
                tvdd.setText(book.getdd()+"");
                //text2.setText("ID=" + String.valueOf(book.getmm()));

                return view;
              }
            }
         
           
               
               
    private void target_cnt_calc() {                ///TARGET_cnt 計算
        // TODO 自動生成されたメソッド・スタブ
                                                                           /////////////////////
         Calendar cal_sta = Calendar.getInstance();                         //最初の日付 
            cal_sta.set(2013,11,1);        ///////////////    これ変更                  //バージョンアップ時変更要
            Calendar cal_tgtsta = Calendar.getInstance();                   // ////////////////  
            cal_tgtsta.set(TARGET_YYYY,TARGET_MM,1);
            long n = (cal_tgtsta.getTimeInMillis()/(1000*60*60*24))
                      -(cal_sta.getTimeInMillis()/(1000*60*60*24));
          
            TARGET_STACNT = (int)n+1;
           
   
            Calendar cal_tgtend = Calendar.getInstance();     
            cal_tgtend.set(TARGET_YYYY,TARGET_MM,1);
            cal_tgtend.add(Calendar.MONTH,1);
            cal_tgtend.add(Calendar.DATE,-1);
            long endcnt = (cal_tgtend.getTimeInMillis()/(1000*60*60*24))
                      -(cal_sta.getTimeInMillis()/(1000*60*60*24));
            TARGET_ENDCNT = (int)endcnt+1;
            Log.v("TARGET_STACNT,ENDCNT ",TARGET_STACNT+"----"+TARGET_ENDCNT);
    int i = 1+1;
    i = i +1;
    }

    public class Book {
          private int m0;
          private int m1;
          private int m2;
          private int m3;
          private int m4;
          private int m5;
          private int m6;
          private String m7;
          private String m8;
          private int m9;
          private int m10;
          private int m11;
          private int m12;
          private String m13;
          private int m14;
          private int m15;
          private int m16;
          private int m17;
          private String m18;
         
       
          //  mId = id;
           // mName = name;
         
         
          public Book(int int0, int int1, int int2, int int3, int int4, int int5,
                int int6, String string7, String string8, int int9, int int10,
                int int11, int int12, String string13, int int14, int int15,
                int int16, int int17, String string18) {
            // TODO 自動生成されたコンストラクター・スタブ
       
          m0 = int0; m1 = int1; m2 = int2; m3 = int3;  m4 = int4;
          m5 = int5; m6 = int6; m7 = string7;
          m8 = string8;  m9 = int9;  m10 = int10; m11 = int11; m12 = int12;
          m13 = string13;  m14 = int14;  m15 = int15; m16 = int16; m17 = int17;
          m18= string18;}

       
          public void setid(int s0) { m0 = s0; }
          public void setcnt(int s1) { m1 = s1; }
          public void setyyyy(int s2) { m2 = s2; }
          public void setmm(int s3) { m3 = s3; }
          public void setdd(int s4) { m4 = s4; }
          public void setaccent(int s5) { m5 = s5; }
          public void setsaiflg(int s6) { m6 = s6; }
          public void setsainm  (String s7) { m7 = s7; }
          public void setdaia  (String s8) { m7 = s8; }
          public void setdstahh(int s9) { m0 = s9; }
          public void setdstamm(int s10) { m1 = s10; }
          public void setdendhh(int s11) { m2 = s11; }
          public void setdendmm(int s12) { m3 = s12; }
          public void sety1     (String s13) { m7 = s13; }
          public void sety1stahh(int s14) { m0 = s14; }
          public void sety1stamm(int s15) { m1 = s15; }
          public void sety1endhh(int s16) { m2 = s16; }
          public void sety1endmm(int s17) { m3 = s17; }
          public void sety2     (String s18) { m18 = s18; }
         
          public int getid()      {return m0; }
          public int getcnt()     {return m1; }
          public int getyyyy()    {return m2; }
          public int getmm()      {return m3; }
          public int getdd()      {return m4; }
          public int getaccent()  {return m5; }
          public int getsaiflg()  {return m6; }
          public String getsainm(){return m7; }
          public String getdaia() {return m8; }
          public int getdstahh()  {return m9; }
          public int getdstamm()  {return m10; }
          public int getdendhh()  {return m11; }
          public int getdendmm()  {return m12; }
          public String gety1()    {return m13; }
          public int gety1stahh()  {return m14; }
          public int gety1stamm()  {return m15; }
          public int gety1endhh()  {return m16; }
          public int gety1endmm()  {return m17; }
          public String gety2()    {return m18; }
           
         
        }     

    private void prev_click() {
        // TODO 自動生成されたメソッド・スタブ
        return;
    }

    @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;
    }