来自SQLite数据库的CustomAdapter

时间:2017-11-21 21:14:17

标签: java android sqlite android-studio

我正在尝试使用CustomAdapter从SQLite数据库设置ListView。 我希望这个ListView能够根据数据库中的“情绪”而改变。

心情基本上从0到4。 一些建议可能会有所帮助。非常感谢...

     // TODO
    // Replace with SQLite data
    DatabaseHelper myDB = new DatabaseHelper(getContext());
    List<MoodItem> moodItemList = myDB.getAllMoodItems();

    String[] mMoods = new String[moodItemList.size()];
    for(MoodItem moodItem : moodItemList){
        mMoods[position] = moodItemList.get(position);
        Log.d("Mood :", " " + moodItem.getMood());
    }

// It's working when I use this for mMoods
// int[] mMoods = {0, 3, 4, 2, 1};

        switch (mMoods[position]) {
            case 0:
                // Bad mood here, so red background and the smallest width
                mRelativeLayout.setBackgroundColor(0xffde3c50);                     // @color/faded_red
                mCustomView.getLayoutParams().width = parent.getWidth() / 5;        // 1/5 of screen's width
                return mCustomView;
            case 1:
                mRelativeLayout.setBackgroundColor(0xff9b9b9b);                     // @color/warm_grey
                mCustomView.getLayoutParams().width = parent.getWidth() * 2 / 5;    // 2/5 of screen's width
                return mCustomView;
            case 2:
                mRelativeLayout.setBackgroundColor(0xa5468ad9);                     // @color/cornflower_blue_65
                mCustomView.getLayoutParams().width = parent.getWidth() * 3 / 5;    // 3/5 of screen's width
                return mCustomView;
            case 3:
                mRelativeLayout.setBackgroundColor(0xffb8e986);                     // @color/light_sage
                mCustomView.getLayoutParams().width = parent.getWidth() * 4 / 5;    // 4/5 of screen's width
                return mCustomView;
            case 4:
                mRelativeLayout.setBackgroundColor(0xfff9ec4f);                     // @color/banana_yellow
                mCustomView.getLayoutParams().width = parent.getWidth();            // screen's width
                return mCustomView;
        }
    return mCustomView;

See this picture as a result for what I would like

编辑: 用int []替换String []。这对开关来说没问题。 关键是,当我在评论中使用我的代码时:

int[] mMoods = {"0", "3", "4", "2", "1"};

CustomAdapter显示我需要的一切:红色为0和宽度的1/5。蓝色为3和3/5的宽度等......

但这里的真正目的是用来自SQLite数据库的真实数据替换int [] mMoods。当我使用代码时,我的ListView项目每次都是相同的......:/

我找不到原因。

1 个答案:

答案 0 :(得分:0)

我刚刚发现了如何回答我的问题:

在我的CustomAdapter的View getView()中:

打开数据库和我的光标

DatabaseHelper myDB = new DatabaseHelper(getContext()) Cursor mCursor = myDB.getAllData();

创建我的ArrayList并向其添加SQLite数据

ArrayList<Integer> mMoodsArray = new ArrayList<>();
while (mCursor.moveToNext()){
   String mComment = mCursor.getString(2);
   int mMood = mCursor.getInt(3);
   mCommentsArray.add(mComment);
   mMoodsArray.add(mMood);
}

从ArrayList创建我的数组

int[] mMoods = new int[mMoodsArray.size()];

在我的数组中添加所有这些

for ( int i = 0; i < mMoodsArray.size(); i++){
  mMoods[i] = mMoodsArray.get(i);
}

现在转换工作正常并且很好!

我真的不知道是否有更好的方法来完成我所做的事情。但它有效!

我希望这可以帮助其他人。

感谢。