java - 如何更改 Sqlite 数据库中特定数据的 Listview 中的行颜色

标签 java android sqlite listview

我有自定义 ListView ,我的数据来自 sqlite 数据库。现在我想根据 id 更改特定 ListView 项目的背景颜色。首先,我检查数据库中是否存在 ID,然后根据 ID 更改特定项目行的背景颜色。

我的问题是它检查成功,但是当我尝试更改背景颜色时,它会更改整个 ListView 背景颜色。这是我的数据的图片和代码。然后你就会明白我的意思了,我到底想对你说什么!

我的数据库:

My db

整个 ListView 颜色更改:

我的代码:

package bible.swordof.God;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.opengl.Visibility;
import android.os.Vibrator;
import android.preference.PreferenceManager;
import android.speech.tts.TextToSpeech;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;

import com.amulyakhare.textdrawable.TextDrawable;
import com.amulyakhare.textdrawable.util.ColorGenerator;


import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import es.dmoral.toasty.Toasty;
import petrov.kristiyan.colorpicker.ColorPicker;

import static android.content.Context.MODE_PRIVATE;
import static android.database.sqlite.SQLiteDatabase.CONFLICT_NONE;
import static android.icu.lang.UCharacter.GraphemeClusterBreak.V;
import static android.support.constraint.Constraints.TAG;
import static android.support.v4.content.ContextCompat.createDeviceProtectedStorageContext;
import static android.support.v4.content.ContextCompat.startActivity;

public class FullverseAdopter extends ArrayAdapter<String> {
    private ALLVERSE activity;

    private List<String> versenumber;
    private List<String>verseid;
    private List<String> verselist;
    private List<String> refernce;
    TextToSpeech textToSpeech;
    private DatabaseHelper mDBHelper;
    private SQLiteDatabase mDb;
    private boolean highlight=false;
    LinearLayout linearLayout;


public  String ex="switch";

    //check for availabe language
    int result;


    public FullverseAdopter(ALLVERSE context, int resource, List<String> versenumber, List<String> verselist, List<String> refernce, List<String>verseid) {
        super(context, resource, versenumber);
        this.activity = context;
        this.versenumber = versenumber;
        this.verselist = verselist;
        this.refernce = refernce;
        this.verseid=verseid;



    }


    @Override
    public int getCount() {
        return versenumber.size();
    }

    @Override
    public String getItem(int position) {
        return versenumber.get(position);
    }

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

    @Override
    public View getView(final int position, View convertView, final ViewGroup parent) {
        final ViewHolder holder;

        LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        // If holder not exist then locate all view from UI file.
        if (convertView == null) {
            // inflate UI from XML file
             convertView = inflater.inflate(R.layout.versedisplayrow, parent, false);
            // get all UI view
            holder = new ViewHolder(convertView);
            // set tag for holder
           holder.versenumber = (TextView) convertView.findViewById(R.id.versenumber);
            holder.verselist = (TextView) convertView.findViewById(R.id.verse);
            holder.addfavoruite=(ToggleButton)convertView.findViewById(R.id.adbookmark);

//check if id is exits in db
            if(CheckIsDataAlreadyInDBorNot("t_asv","id","1001001"))
            {

                holder.linearLayout.setBackgroundColor(Color.parseColor("#008577"));
            }



            convertView.setTag(holder);
        } else {
            // if holder created, get tag from view
            holder = (ViewHolder) convertView.getTag();
        }
        holder.versenumber.setText(versenumber.get(position));

        holder.verselist.setText(verselist.get(position));





holder.linearLayout.setOnLongClickListener(new View.OnLongClickListener() {




    @Override
    public boolean onLongClick(View v) {

        //Toasty.success(activity, "PICK COLOR", Toast.LENGTH_SHORT, true).show();
        Vibrator vibe = (Vibrator)activity.getSystemService(Context.VIBRATOR_SERVICE);
        vibe.vibrate(100);


        Toast.makeText(activity, ""+verseid.get(position), Toast.LENGTH_SHORT).show();







      /*  ColorPicker colorPicker = new ColorPicker(activity);
        ArrayList<String>colors=new ArrayList<>();
        colors.add("#e0e0eb");
        colors.add("#ccffff");
        colors.add("#ffe6ff");
        colors.add("#ffffcc");
        colors.add("#ccffcc");
        colors.add("#e6f2ff");
        colorPicker.setColors(colors).setColumns(4).setTitle("HIGHLIGHT VERSE").setRoundColorButton(true).setOnChooseColorListener(new ColorPicker.OnChooseColorListener() {
            @Override
            public void onChooseColor(int position, int color) {





              //  holder.linearLayout.setBackgroundColor(color);





            }

            @Override
            public void onCancel() {

            }
        }).show();*/






        return false;
    }
});
        /*holder.verselist.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                holder.verselist.setBackgroundColor(Color.parseColor("#e0e0eb"));
                return false;
            }
        });*/

//verselist highlight

/*holder.verselist.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {






    }
});*/



        //share verse
        holder.share.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toasty.info(activity, "Sharing a verse.", Toast.LENGTH_SHORT, true).show();
                Intent sendIntent = new Intent();
                sendIntent.setAction(Intent.ACTION_SEND);
                sendIntent.putExtra(Intent.EXTRA_TEXT, refernce.get(position) + ":" + versenumber.get(position) + '\n'   + verselist.get(position));
                sendIntent.setType("text/plain");
                activity.startActivity(sendIntent);

            }
        });

//add in favourite
      holder.addfavoruite.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if(isChecked){
                    mDBHelper = new DatabaseHelper(activity);
                    mDb = mDBHelper.getWritableDatabase();
                    ContentValues contentValues=new ContentValues();
                  contentValues.put("id",verseid.get(position));
                  contentValues.put("bookname",refernce.get(position));
                   contentValues.put("versenumber",versenumber.get(position));
                   contentValues.put("verse",verselist.get(position));
                   long check=mDb.insert("favourite",null,contentValues);
                   Log.d("MY_TAG","DB IS NOW "+check);
                   Toasty.success(activity, "Added in favouite", Toast.LENGTH_SHORT, true).show();


                }else {


                    mDBHelper = new DatabaseHelper(activity);
                    mDb = mDBHelper.getWritableDatabase();
                    long delete= mDb.delete("favourite","id=?",new String[]{verseid.get(position)});
                   Toasty.error(activity, "Remove in favouite", Toast.LENGTH_SHORT, true).show();
                }


            }
        });

       /* textToSpeech = new TextToSpeech(activity, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {

                if (status == TextToSpeech.SUCCESS) {
                    result = textToSpeech.setLanguage(Locale.ENGLISH);
                } else {

                    Toast.makeText(activity, "YOUR DEVICE NOT SUPPORTED", Toast.LENGTH_SHORT).show();
                }
            }
        });
*/



        //My toggle button








       /* holder.speakverse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Toast.makeText(activity, "I AM CLICKED", Toast.LENGTH_SHORT).show();

                if (result == TextToSpeech.LANG_NOT_SUPPORTED || result == TextToSpeech.LANG_MISSING_DATA) {

                    Toast.makeText(activity, "Language not supported or Missing", Toast.LENGTH_SHORT).show();

                } else {


                    textToSpeech.speak(verselist.get(position), TextToSpeech.QUEUE_FLUSH, null);

                }
            }
        });*/




        return convertView;
    }

    static class ViewHolder {
        private TextView versenumber;
        private TextView verselist;

        private ImageView share;
        private  ToggleButton addfavoruite;
        private ImageView speakverse;
        private LinearLayout linearLayout;

        public ViewHolder(View v) {
            versenumber = (TextView) v.findViewById(R.id.versenumber);
            verselist = (TextView) v.findViewById(R.id.verse);
           share = (ImageView) v.findViewById(R.id.share);
            /*speakverse = (ImageView) v.findViewById(R.id.speakverse);*/
        addfavoruite=(ToggleButton)v.findViewById(R.id.adbookmark);
        linearLayout=(LinearLayout)v.findViewById(R.id.layout);



        }


    }
    public boolean CheckIsDataAlreadyInDBorNot(String TableName,  String dbfield, String fieldValue) {

        mDBHelper = new DatabaseHelper(activity);
        mDb = mDBHelper.getReadableDatabase();
        String Query = "Select * from " + TableName + " where " + dbfield + " = " + fieldValue;
        Cursor cursor = mDb.rawQuery(Query, null);
        if(cursor.getCount() <= 0){
            cursor.close();

            Toast.makeText(activity, "false", Toast.LENGTH_SHORT).show();
            return false;
        }else {


            Toast.makeText(activity, "TRUE", Toast.LENGTH_SHORT).show();

        }
        cursor.close();


        return true;
    }
    public  void opecolorpicker(){

    }

}

最佳答案

假设您将 ID 存储在 private List<String>verseid; 中,可以通过它来查看当前ListView的ID项目。
当前项目位置将在 final int position 中传递给您参数。
因此要检查并应用颜色:
删除

if(CheckIsDataAlreadyInDBorNot("t_asv","id","1001001"))
{
     holder.linearLayout.setBackgroundColor(Color.parseColor("#008577"));
}

来自 if (convertView == null) {
然后在 if 之外添加此代码:

if("1001001".equals(verseid.get(position))) {
    //change the color
} else {
    //set the color to default
}

请注意,由于 ListView 的方式作品(回收元素)你必须在else内设置默认颜色.

关于java - 如何更改 Sqlite 数据库中特定数据的 Listview 中的行颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56423663/

相关文章:

java - 是否可以让单个文档监听器在 Swing 中监听多个文本字段

java - 一起使用 JDBC 和 Hibernate 4 进行 Spring 事务管理

java - 安卓 Java : can switch statement avoid inlining when creating a secret string?

ios - 尝试创建 sqlite 数据库时出现错误 'Could not create table' IOS7

android - 如何在android中的sqlite数据库中存储带有列表的自定义对象

android - SQLiteOpenHelper onCreate 不创建数据库 - 或者它被立即覆盖

java - 如何对同步方法进行单元测试?

java - CompletableFuture 与 Spring 事务

java - 约束布局是否应该包裹所有其他 View ?

Android以编程方式添加 fragment - 在父级和布局中的位置