[英]ListView highlight a single or multiple rows programmatically
這是我的代碼,它使用從 firebase 存儲的數據填充 ListView。 我希望能夠根據我之前選擇的項目(存儲在 firebase 中)以編程方式突出顯示項目列表中的一個項目或幾個項目。 感謝任何幫助/指針。
我已將choiceMode 設置為multipleChoice。
謝謝你。
<ListView
android:id="@+id/listv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/holidayChecklist"
android:layout_marginTop="100dp"
android:divider="@color/midGreen"
android:dividerHeight="2dp"
android:padding="15dp"
android:choiceMode="multipleChoice"/>
public class ChecklistActivity2 extends AppCompatActivity {
ImageButton back;
ListView checklist;
ArrayAdapter<String> displayChecklist;
private Firebase mRef;
ArrayList<String> items = new ArrayList<>();
ArrayList<Boolean> values = new ArrayList<>();
ArrayList<Boolean> valuesog = new ArrayList<>();
TextView text;
public int SIZE_OF_CHECKLIST = 16;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_checklist);
Firebase.setAndroidContext(this);
mRef = new Firebase("https://vacay.firebaseio.com/");
back = findViewById(R.id.backButton);
checklist = findViewById(R.id.listv);
text = findViewById(R.id.txtitem);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ChecklistActivity2.this, HomeScreenActivity.class);
startActivity(intent);
}
});
getChecklist();
checklist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item = (String) checklist.getItemAtPosition(position);
System.out.println("HERE " + item + " position: " + position);
if (values.get(items.indexOf(item))) {
values.set(items.indexOf(item), false);
view.setSelected(false);
System.out.println(item+" NOW FALSE");
}
else {
values.set(items.indexOf(item), true);
view.setSelected(true);
System.out.println(item+ " NOW TRUE");
}
}
});
}
@Override
protected void onPause() {
super.onPause();
setChecklist();
items.clear();
values.clear();
valuesog.clear();
}
@Override
protected void onStop() {
super.onStop();
setChecklist();
items.clear();
values.clear();
valuesog.clear();
}
public void getChecklist() {
System.out.println("RUNNING GETCHECKLIST, SIZE " + items.size());
Firebase mRefChild = mRef.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("holiday_checklist");
mRefChild.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println("data changed!");
if (dataSnapshot.getValue() != null) {
Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
for (Map.Entry<String, Object> entry : map.entrySet()){
//Get user map
Boolean value = (Boolean) entry.getValue();
String item = entry.getKey();
items.add(item);
valuesog.add(value);
}
values.addAll(valuesog);
displayChecklist = new ArrayAdapter<String>(
ChecklistActivity2.this,
R.layout.list_item,
items
);
checklist.setAdapter(displayChecklist);
}
for (int i = 0; i < SIZE_OF_CHECKLIST; i++) {
if (values.get(i)) {
System.out.println("owo " + checklist.getItemAtPosition(i));
// displayChecklist.getView(i, null, checklist).setBackgroundResource(R.drawable.selected_item);
// TextView t = (TextView) displayChecklist.getView(3, text, checklist);
// t.setBackgroundColor(Color.BLUE);
// System.out.println(displayChecklist.getItemViewType(0));
}
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("firebase canceled oops");
}
});
}
public void setChecklist() {
System.out.println("SETTING CHECKLIST, SIZE " + values.size());
if (values.size() > 0) {
for (int i = 0; i < SIZE_OF_CHECKLIST; i++) {
Firebase mRefChild = mRef.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("holiday_checklist")
.child(items.get(i));
if (values.get(i) != valuesog.get(i)) {
System.out.println(items.get(i) + " CHANGED");
if (valuesog.get(i)) {
System.out.println(items.get(i) + " SET TO FALSE");
mRefChild.setValue(false);
}
else {
System.out.println(items.get(i) + " SET TO TRUE");
mRefChild.setValue(true);
}
}
}
}
System.out.println("FINISHED SETTING, SIZE " + values.size());
}
下面是當用戶點擊一個項目時將背景變為綠色的選擇器。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<item
android:drawable="@color/midGreen"
android:state_activated="true"/>
</selector>
您必須首先創建數據 model 並添加isSelected
Boolean
state 變量。 例子:
class YourDataModel {
String data;
String whatever;
Boolean isSelected;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.