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

리스트뷰에 데이터를 뿌려주는데 1개밖에 안나옵니다. [closed]

0 추천
public List getAllData() {
    StringBuffer sb = new StringBuffer();
    sb.append(" SELECT _ID, ID, PW FROM LOGIN ");
    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = db.rawQuery(sb.toString(), null);
    List list = new ArrayList();
    Login login = null;
    while (cursor.moveToNext()) {
        login = new Login();
        login.set_id(cursor.getInt(0));
        login.setId(cursor.getString(1));
        login.setPw(cursor.getString(2));
        list.add(login);
    }
    return list;
}

 

이렇게 디비데이터는 list에 추가시켜놓았구요

        btnSelectAllData = (Button) findViewById(R.id.select);
        btnSelectAllData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // ListView를 보여준다.
                listView.setVisibility(View.VISIBLE);
                // DB Helper가 Null이면 초기화 시켜준다.
                if (dbHelper == null) {
                    dbHelper = new DBHelper(DBActivity.this, "TEST", null, 1);
                }
                // 1. Person 데이터를 모두 가져온다.
                List list = dbHelper.getAllData();
                // 2. ListView에 Person 데이터를 모두 보여준다.
                listView.setAdapter(new LoginListAdapter(list, DBActivity.this));
                listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView parent, View v, int position, long id) {

                        // get TextView's Text.
//                        String strText = (String) parent.getItemAtPosition(position) ;

                        // TODO : use strText
                    }
                }) ;
            }
        });
    }
 

 

조회버튼을 누르면 리스트뷰에 나와야 되는데 1개밖에 노출되지 않습니다.

listView.setAdapter 여기가 문제인거 같은데

 

어떻게 해야 리스트뷰에[ 데이터 모두를노출시킬 수 있나요?

저기서 데이터개수만큼 포문을 setAdapter해야되나요?

 

질문을 종료한 이유: 스크롤뷰에 리스트뷰가 들어있어 1개만 나오던 이슈였습니다.
브루스웨인 (8,580 포인트) 님이 2017년 7월 19일 질문
브루스웨인님이 2017년 7월 26일 closed

1개의 답변

0 추천

setAdapter 호출은 한번만 하시면 되며, 올려주신 코드상은 DB에서 데이터를 못 구해 null이 될 경우 처리만 빼군 , 딱히 문제가 없네요..

먼저  List list = dbHelper.getAllData(); 로 구한 list 에 들어간 갯수가 몇개인지 확인 해 보셔야 할 듯 합니다.

만약 여러개 일 경우

LoginListAdapter 구현이 잘 못 되서 한개만 나오는 듯 하니 이쪽 소스를 올려주셔야 할 듯 합니다.

(getCount 같은게 1이 반환되게 하드 코딩 되어있을 가능성도...ㅎㅎ)

 

익명사용자 님이 2017년 7월 20일 답변
import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.List;


class LoginListAdapter extends BaseAdapter{

    private List list;
    private Context context;

    public LoginListAdapter(List list, Context context) {
        this.list = list;
        this.context = context;
    }

    public int getCount() {
        return this.list.size();
    }

    public Object getItem(int position) {
        return this.list.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        Holder holder = null;
        if (convertView == null) {
            convertView = new LinearLayout(context);
            ((LinearLayout) convertView).setOrientation(LinearLayout.HORIZONTAL);
            TextView tvId = new TextView(context);
            tvId.setPadding(10, 0, 20, 0);
            tvId.setTextColor(Color.rgb(0, 0, 0));
            TextView tvName = new TextView(context);
            tvName.setPadding(20, 0, 20, 0);
            tvName.setTextColor(Color.rgb(0, 0, 0));
            TextView tvPw = new TextView(context);
            tvPw.setPadding(20, 0, 20, 0);
            tvPw.setTextColor(Color.rgb(0, 0, 0));
            ((LinearLayout) convertView).addView(tvId);
            ((LinearLayout) convertView).addView(tvName);
            ((LinearLayout) convertView).addView(tvPw);
            holder = new Holder();
            holder.tv_id = tvId;
            holder.tvId = tvName;
            holder.tvPw = tvPw;
            convertView.setTag(holder);
        } else {
            holder = (Holder) convertView.getTag();
        }
        Login login = (Login) getItem(position);
        holder.tv_id.setText(login.get_id() + "");
        holder.tvId.setText(login.getId());
        holder.tvPw.setText(login.getPw() + "");
        return convertView;
    }
    private class Holder {
        public TextView tv_id;
        public TextView tvId;
        public TextView tvPw;
    }
}

코드는 이런상태인데 아직 수정을 못했습니다.
...