我希望Listview项目的背景颜色在第一次单击时获得更改,并将之前的颜色恢复为第二次单击(切换)。 我使用以下代码,但在第二次单击它不起作用。还有一个这个应用程序应该记住listview项目重新启动后的状态。
DatabaseHelper.java
select
c.calendar_date on_date,
xx.school_name,
COALESCE(xx.cnt,0)
from
tbl_calendar c
left join (
select
s.school_id,
s.school_name,
x.booked_date,
x.cnt
from tbl_school s
left join (
select
sb.booked_date,
count(*) cnt,
sb.school_id
from
tbl_school_booking sb
group by
sb.booked_date, sb.school_id
) x on x.school_id = s.school_id
) xx on c.calendar_date=xx.booked_date;
MainActivity
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "listcolor.db";
public static final String TABLE_NAME = "listtable";
public static final String COL_1 = "title";
public static final String COL_2 = "status";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_NAME + " (title TEXT, status TEXT )");
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public boolean insertData(String title, String status) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_1, title);
contentValues.put(COL_2, status);
db.insert(TABLE_NAME, null, contentValues);
return true;
}
public Cursor getData(String title) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select status from " + TABLE_NAME + " where title=" + title + "", null);
return res;
}
}
答案 0 :(得分:0)
经过一点点记录后,事实证明在离开 listView.setOnItemClickListener 功能后,所有元素都会重置为未选中。我建议您尝试通过向所选项目添加tag然后在if语句中添加check for it来解决此问题。默认情况下,标签设置为 null ,因此您可以利用此功能。
使用代码
的工作代码段if (listView.getChildAt(position).getTag() != null) {
listView.getChildAt(position).setBackgroundColor(Color.WHITE);
listView.getChildAt(position).setTag(null);
} else {
listView.getChildAt(position).setBackgroundColor(Color.GREEN);
listView.getChildAt(position).setTag("selected");
}
答案 1 :(得分:0)
但是第二次点击它不起作用
这是因为每当你点击一个项目时:
listView.getChildAt(position).isSelected()
返回 true 。
如果要保存状态以便在重新启动应用程序后保持状态。我会将状态保存在数据库中。(例如SQLite)。
Sugar可以真正帮助你。每当状态改变时,您将其保存到数据库中,并根据您在DB中保存的状态更改颜色。
答案 2 :(得分:0)
在onClick中,检查单击的视图的标记,并根据单击的状态进行更改。您可以根据标记切换颜色。
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tag="De-selected"
android:id="@+id/text"/>
if (listView.getChildAt(position).getTag().equals("selected")) {
listView.getChildAt(position).setBackgroundColor(Color.WHITE);
listView.getChildAt(position).setTag("De-selected");
} else {
listView.getChildAt(position).setBackgroundColor(Color.GREEN);
listView.getChildAt(position).setTag("selected");
listView.getChildAt(position).setSelected(true);
}