마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

리스트뷰에 아이템 표시 방법에 대한 고찰

0 추천

 

에뮬상으로는 ListView가 깔끔하게 나옵니다만..

실제폰에 적용했을시 리스트뷰 한행의 높이는 변하지 않은채  ,,

위 화면에 안 보이는 데이터들이 밑으로 나열되면서 3번째 데이터가 반쯤 짤려서 더럽게 보입니다.

그림이 그려지시나요?^,^

 

질문을 드리고자하는 바는

밑에 보시다시피 제가 db에 5개 컬럼의 데이터를 저장합니다.

public void dbSave() {
   
   SQLiteDatabase db;
   String sql;
   
   TextView Today = (TextView)findViewById(R.id.today);
   String Today2 = Today.getText().toString();
   TextView Sigan = (TextView)findViewById(R.id.sigan);
   String Sigan2 = Sigan.getText().toString();
   TextView juso = (TextView)findViewById(R.id.where);
   String juso2 = juso.getText().toString();
   TextView Wave = (TextView)findViewById(R.id.wavelength);
   String Wave2 =  Wave.getText().toString();
   TextView Power = (TextView)findViewById(R.id.power);
   String power2 = Power.getText().toString();
   
   dbHelper = new DBHelper(this, dbName, null, dbVersion);
   db = dbHelper.getWritableDatabase();
   sql = String.format("INSERT INTO notice(Today2, Sigan2, juso2, Wave2, power2) VALUES('%s', '%s', '%s', '%s', '%s');", Today2, Sigan2, juso2, Wave2, power2);
   Log.d("tag", sql);
   db.execSQL(sql);
   Toast.makeText(this, "SAVED !!.", Toast.LENGTH_LONG).show(); 
  }

이 저장된 db를 버튼을 눌름으로써 맨위의 사진이 표시가 되는 건데요

db에는 5개의 컬럼을 저장하는 건 변함이 없고

단순히 리스트뷰에 보이는 데이터를 1-2개로 줄이고 싶은데요

 

이 방법에 대한 조언을 듣고자 합니다

밑에 소스는 맨 위 사진에 대한 소스 입니다,.

private void datasee() {
  
  SQLiteDatabase db;
  String sql;
  
  ArrayList<String> item = new ArrayList<String>();
  adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, item);
  
  ListView mList = (ListView)findViewById(R.id.list);
  mList.setAdapter(adapter);
  mList.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
  
  mList.setOnItemClickListener(mItemClickListener);
       // findViewById(R.id.delete).setOnClickListener(mClickListener);
  adapter.notifyDataSetChanged();
     
  Log.d("SQL", "open data source success !!!");
  dbHelper = new DBHelper(this, dbName, null, dbVersion);
  db = dbHelper.getReadableDatabase();
  sql = "SELECT*FROM notice;";
  Cursor cursor = db.rawQuery(sql, null);
     
      if(cursor.getCount() > 0) {     
         while(cursor.moveToNext()){
               String date1 = cursor.getString(1);
               Log.d("tag", "cursor.getString1 = "+date1);
               String time1 = cursor.getString(2);
               Log.d("tag", "cursor.getString2 =" +time1);
               String wichi1 = cursor.getString(3);
               Log.d("tag", "cursor.getString3 =" +wichi1);
               String pajang1 = cursor.getString(4);
               Log.d("tag", "cursor.getString4 =" +pajang1);
               String opower1 = cursor.getString(5);
               Log.d("tag", "cursor.getString5 =" +opower1);
                             
               item.add(date1+"\n"+time1+"\n"+wichi1+"\n"+pajang1+"\n"+opower1);
               adapter.notifyDataSetChanged();                
              }
         cursor.close();
      }
      dbHelper.close();
}

AdapterView.OnItemClickListener mItemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    // String mes = "Select item = " + item.get(position);
    // Toast.makeText(MainActivity.this, mes, Toast.LENGTH_SHORT).show();
  
  final String str = (String)parent.getItemAtPosition(position); 
     Log.d("tag", str);
     Toast.makeText(getBaseContext(), str, Toast.LENGTH_SHORT).show();
    
     AlertDialog.Builder alert = new AlertDialog.Builder(DataActivity.this);
     alert.setPositiveButton("확인", new DialogInterface.OnClickListener() {
         @Override
         public void onClick(DialogInterface dialog, int which) {
         
         Intent intent = new Intent(DataActivity.this, ReportActivity.class);
         intent.putExtra("arraydata", str);
         startActivityForResult(intent, 0);     
        
         dialog.dismiss();
         }
     });
     alert.setMessage("Report Data");
     alert.show();         
}
};
}

 

그리워요 안드로메다 (250 포인트) 님이 2013년 6월 19일 질문

1개의 답변

0 추천

1. 원하는 데이터만 하단에 넣으면 되겠죠

item.add(date1+"\n"+time1+"\n"+wichi1+"\n"+pajang1+"\n"+opower1); 

2. adapter.notifyDataSetChanged();   는  cursor.close 이후에 한번만 호출하게 하세요


 while(cursor.moveToNext()){
       String date1 = cursor.getString(1);
       Log.d("tag", "cursor.getString1 = "+date1);
       String time1 = cursor.getString(2);
       Log.d("tag", "cursor.getString2 =" +time1);
       String wichi1 = cursor.getString(3);
       Log.d("tag", "cursor.getString3 =" +wichi1);
       String pajang1 = cursor.getString(4);
       Log.d("tag", "cursor.getString4 =" +pajang1);
       String opower1 = cursor.getString(5);
       Log.d("tag", "cursor.getString5 =" +opower1);
                      
       item.add(date1+"\n"+time1+"\n"+wichi1+"\n"+pajang1+"\n"+opower1);
                     
      }
 cursor.close();
adapter.notifyDataSetChanged();  

3.디비가 열리기 전에 주석에 디비가 이미 열렸다로 되어 있네요?

Log.d("SQL", "open data source success !!!");
dbHelper = new DBHelper(this, dbName, null, dbVersion);

 

aucd29 (218,390 포인트) 님이 2013년 6월 19일 답변
date1과 time1만 나오게 하고 싶은데요. arraylist에는 5개컬럼값이 모두 들어가 있어야 되서요. 나중에 값을 다 불러서 텍스트뷰에 뿌려야되서요

aucd29님께서 주신 조언은
item.add(date1+"\"+time1); 이렇게 말씀하신건지 아님 제가 잘못이해한건지 모르겠네요.
item 의 데이터 구조를 변경하세요 String 을 ArrayList 에 넣는게 아닌
클래스를 하나 만들어서 1:1 매핑 시키면 될 것 같습니다.

class ListData {
    public String date;
    public String time;
... 식인거죠
}
...