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

리스트뷰안의 리스트뷰에서 데이터들이 첫번째선택된 리스트안에서만 보여지는 오류

0 추천

표를 설정하고 리스트뷰가 설정한 목표목록들을 보여줍니다. 그리고 목록중에서 선택하여 계획을 설정할 수 있는 액티비티로 들어가는데요, viewpager로 만들어진 4개의 fragment가 보여집니다. (over year, yearly, monthly, weekly 계획을 작성하는) 각 프래그먼트에서 계획을 추가하는 액티비로가는 플로팅버튼이 있구요, 추가된 계획을 리스트뷰로 다시 목록화해서 보여줍니다. 계획을 추가하는 액티비티는 하나를 공용으로 사용합니다.

목표설정하고 리스트뷰에보여지는 것은 문제가 없습니다. 계획을 설정하려고 목표리스트를 클릭해서 들어갈때부터 문제가 발생하는데요.

앱을 켰을때 첫번째로 선택된 목표아이템으로 들어간 액티비티에서는 계획추가와 리스트뷰에 보여지는 것은 정상적으로 작동합니다.

문제는 1. 첫번째로 선택한 목표 이외의 다른 목표아이템을 선택해서 액티비티에 들어가서 계획을 추가하면 첫번째로 선택한 목표안에 있는 viewpage의 프래그먼트에 데이터가 조회가됩니다. 즉, 해당 화면에서 추가했는데 다른 화면에 보여진다는 것이죠.

2. 그리고 sql query상 목표와 관련된 것들만 조회하도록 쿼리를 작성했는데 첫번째로 선택한 목표리스트로 들어간 viewpage에서는 목표와 상관없이 모든데이터들이 리스트뷰에 조회가됩니다.

 

이게 데이터베이스 코드이구요

 public void onCreate(SQLiteDatabase db) {
        // GOAL 테이블 생성
        println("creating table [" + GOAL + "].");

        String DROP_GOAL = "drop table if exists " + GOAL;
        try {
            db.execSQL(DROP_GOAL);
        } catch (Exception e) {
            Log.e(TAG, "Exception in DROP_GOAL", e);
        }

        String CREATE_GOAL = "create table " + GOAL + "("
                                            + "goal varchar(255),"
                                            + "period varchar(255),"
                                            + "primary key(goal)"
                                            + ");";
        try {
            db.execSQL(CREATE_GOAL);
        } catch (Exception e) {
            Log.e(TAG, "Exception in CREATE_GOAL", e);
        }

        // OVER_THE_YEAR 테이블 생성
        println("creating table [" + OVER_THE_YEAR + "].");

        String DROP_OTY = "drop table if exists " + OVER_THE_YEAR;
        try {
            db.execSQL(DROP_OTY);
        } catch (Exception e) {
            Log.e(TAG, "Exception in DROP_OTY", e);
        }

        String CREATE_OTY = "create table " + OVER_THE_YEAR + "("
                + "period int,"
                + "doit varchar(255),"
                + "goal varchar(255),"
                + "primary key(doit),"
                + "foreign key(goal) references GOAL_TABLE(goal)"
                + ");";
        try {
            db.execSQL(CREATE_OTY);
        } catch (Exception e) {
            Log.e(TAG, "Exception in CREATE_YEAR", e);
        }

        // In a year 테이블 생성
        println("creating table [" + IN_A_YEAR + "].");

        String DROP_YEAR = "drop table if exists " + IN_A_YEAR;
        try {
            db.execSQL(DROP_YEAR);
        } catch (Exception e) {
            Log.e(TAG, "Exception in DROP_YEAR", e);
        }

        String CREATE_YEAR = "create table " + IN_A_YEAR + "("
                + "from_period int,"
                + "to_period int,"
                + "over_year_plan varchar(255),"
                + "doit varchar(255),"
                + "goal varchar(255),"
                + "primary key(doit),"
                + "foreign key (goal) references GOAL_TABLE(goal),"
                + "foreign key (over_year_plan) references OVER_THE_YEAR(doit)"
                + ");";
        try {
            db.execSQL(CREATE_YEAR);
        } catch (Exception e) {
            Log.e(TAG, "Exception in CREATE_", e);
        }

        // IN A MONTH 테이블 생성
        println("creating table [" + IN_A_MONTH + "].");

        String DROP_MONTH = "drop table if exists " + IN_A_MONTH;
        try {
            db.execSQL(DROP_MONTH);
        } catch (Exception e) {
            Log.e(TAG, "Exception in DROP_YEAR", e);
        }

        String CREATE_MONTH = "create table " + IN_A_MONTH + "("
                + "from_period int,"
                + "to_period int,"
                + "year_plan varchar(255),"
                + "doit varchar(255),"
                + "goal varchar(255),"
                + "primary key(doit),"
                + "foreign key (goal) references GOAL_TABLE(goal),"
                + "foreign key (year_plan) references IN_A_YEAR(doit)"
                + ");";
        try {
            db.execSQL(CREATE_MONTH);
        } catch (Exception e) {
            Log.e(TAG, "Exception in CREATE_MONTH", e);
        }

        // IN A WEEK 테이블 생성
        println("creating table [" + IN_A_WEEK + "].");

        String DROP_WEEK = "drop table if exists " + IN_A_WEEK;
        try {
            db.execSQL(DROP_WEEK);
        } catch (Exception e) {
            Log.e(TAG, "Exception in DROP_WEEK", e);
        }

        String CREATE_WEEK = "create table " + IN_A_WEEK + "("
                + "from_period int,"
                + "to_period int,"
                + "month_plan varchar(255),"
                + "doit varchar(255),"
                + "goal varchar(255),"
                + "primary key(doit),"
                + "foreign key (goal) references GOAL_TABLE(goal),"
                + "foreign key (month_plan) references IN_A_MONTH(doit)"
                + ");";
        try {
            db.execSQL(CREATE_WEEK);
        } catch (Exception e) {
            Log.e(TAG, "Exception in CREATE_WEEK", e);
        }

        // DAY 테이블 생성
        println("creating table [" + DAILY + "].");

        String DROP_DAY = "drop table if exists " + DAILY;
        try {
            db.execSQL(DROP_DAY);
        } catch (Exception e) {
            Log.e(TAG, "Exception in DROP_DAY", e);
        }

        String CREATE_DAY = "create table " + DAILY + "("
                + "from_period int,"
                + "to_period int,"
                + "month_plan varchar(255),"
                + "week_plan varchar(255),"
                + "doit varchar(255),"
                + "goal varchar(255),"
                + "primary key(doit),"
                + "foreign key (goal) references IN_A_YEAR(goal),"
                + "foreign key (month_plan) references IN_A_MONTH(doit),"
                + "foreign key (week_plan) references IN_A_WEEK(doit)"
                + ");";
        try {
            db.execSQL(CREATE_DAY);
        } catch (Exception e) {
            Log.e(TAG, "Exception in CREATE_DAY", e);
        }
    }

 

이거는 데이터를 조회하는 코드입니다.

public ArrayList<GoalItem> selectAll() {
    ArrayList<GoalItem> result = new ArrayList<GoalItem>();

    try {
        Cursor cursor = db.rawQuery("select * from " + GOAL, null);
        for (int i = 0; i < cursor.getCount(); i++) {
            cursor.moveToNext();
            String goal = cursor.getString(0);
            String period = cursor.getString(1);

            GoalItem item = new GoalItem(goal, period);
            result.add(item);
        }

    } catch(Exception ex) {
        Log.e(TAG, "Exception in executing insert SQL.", ex);
    }

    return result;
}

public ArrayList<OTYItem> selectOTY(String goal) {
    ArrayList<OTYItem> result = new ArrayList<OTYItem>();

    try {
        Cursor cursor = db.rawQuery("select * from " + OVER_THE_YEAR + " where goal = '" + goal +"';", null);
        for (int i = 0; i < cursor.getCount(); i++) {
            cursor.moveToNext();
            int period = cursor.getInt(0);
            String doit = cursor.getString(1);
            String goals = cursor.getString(2);

            OTYItem item = new OTYItem(period, doit, goals);
            result.add(item);
        }

    } catch(Exception ex) {
        Log.e(TAG, "Exception in executing get OTY.", ex);
    }

    return result;
}

 

로그엔 아무것도 안 떠서... ㅠㅠ

정확한 해결책이아니더라도 여러 가능성을 제시해주시면 해결책을 찾아보겠습니다.

김명철2 (140 포인트) 님이 2018년 1월 22일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...