gpt4 book ai didi

android - 如何在没有 onClick 的情况下突出显示 ListView 中的行?

转载 作者:行者123 更新时间:2023-11-29 02:36:25 27 4
gpt4 key购买 nike

我需要在没有 onClick 的情况下自动突出显示 ListView 中的一行。我的应用程序所做的是在食品有效期低于 90 天时对特定食品发出警报(突出显示)。我在 Stack Overflow 上搜索了一个解决方案,但所有亮点都是使用 onClick 实现的。我已经为我的 ListView 实现了 onClick 高亮显示(这不是我想要的)有没有什么方法可以在食品有效期低于 90 天时自动实现高亮显示?任何帮助将不胜感激!

当我点击产品 Milo 时会出现突出显示,如何让突出显示自动显示在 90 天以内过期的食品上

这是我的 XML 布局

    <ListView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_above="@+id/AddProduct"
android:id="@+id/listView2"
android:layout_centerHorizontal="true"
android:layout_alignParentTop="true"
android:choiceMode="multipleChoice"
android:listSelector="@drawable/Selector"
/>

我的 Java 文件

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_inventory);
AddProduct = (Button) findViewById(R.id.AddProduct);
camera = (ImageButton) findViewById(R.id.camera);
AddProduct.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Inventory.this, AddProduct.class));
}
});
camera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), BarcodeCaptureActivity.class);
startActivityForResult(intent, BARCODE_READER_REQUEST_CODE);

}
});

mList = (ListView) findViewById(R.id.listView2);
arrayAdapter = new ItemsAdapter(this, android.R.layout.simple_list_item_1, items);
mList.setAdapter(arrayAdapter);
database = FirebaseDatabase.getInstance().getReference("All Barcodes");
final List<String> keys = new ArrayList<>(); // will contain list of keys corresponding to listview item
database.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(final DataSnapshot dataSnapshot) {
arrayAdapter.clear();
for(final DataSnapshot snapshot : dataSnapshot.getChildren()){
arrayAdapter.notifyDataSetChanged();

Calendar c = Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String dateNow = df.format(c.getTime());
String exp = snapshot.child("expiration").getValue().toString();
String barcode = snapshot.child("barcode").getValue().toString();
String name = snapshot.child("pname").getValue().toString();
String q = snapshot.child("quantity").getValue().toString();

Date d1 = null;
Date d2 = null;
try{
d1 = df.parse(exp);
d2 = df.parse(dateNow);
}
catch(Exception e){
}

long diff = d1.getTime() - d2.getTime();
long hours = diff/(60*60*1000);
long days = hours/24;

if (days<=90){
NotificationGenerator.openActivityNotification(getApplicationContext(),barcode, name, days);
Log.i( "Item expring in: " , days + " days");
Log.i("Item's barcode is " , barcode);



}
else{
Log.i("Item expring in: " , days + " days");
}

String value = (String) snapshot.child("expiration").getValue();

items eachItem = new items(name,value.toString(),Long.toString(days),q);

arrayAdapter.add(eachItem);

keys.add(snapshot.getKey());


}
arrayAdapter.notifyDataSetChanged();

mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) {

view.setSelected(true);
String myKey = keys.get(i);
Intent intent = new Intent(Inventory.this,Edit.class);
intent.putExtra("value",myKey);
startActivity(intent);
}
});
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

}

我的 ListView 适配器

public class ItemsAdapter extends ArrayAdapter<items> {
private ArrayList<items> itemObjects;

public ItemsAdapter(Context context, int textViewResourceId, ArrayList<items> itemObjects) {
super(context, textViewResourceId, itemObjects);
this.itemObjects = itemObjects;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View v = convertView;

// first check to see if the view is null. if so, we have to inflate it.
// to inflate it basically means to render, or show, the view.

if (v == null) {

LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

//inflating the tex views from list_items.xml
v = inflater.inflate(R.layout.list_items, null);
}

/*
* Recall that the variable position is sent in as an argument to this method.
* The variable simply refers to the position of the current object in the list. (The ArrayAdapter
* iterates through the list we sent it)
*
* Therefore, i refers to the current Item object.
*/
items i = itemObjects.get(position);

//If i is not null
if (i != null) {

// obtaining a reference to the TextViews.
// These TextViews are created in the XML files we defined.
TextView ProdName = (TextView) v.findViewById(R.id.ProductName);
TextView ProdNameValue = (TextView) v.findViewById(R.id.ProductNameData);
TextView ExpiryDate = (TextView) v.findViewById(R.id.ExpiryDate);
TextView ExpiryDateData = (TextView) v.findViewById(R.id.ExpiryDateData);
TextView ExpiryIn = (TextView) v.findViewById(R.id.ExpiryIn);
TextView ExpiryInData = (TextView) v.findViewById(R.id.ExpiryInData);
TextView BarCode = (TextView) v.findViewById(R.id.BarCode);
TextView BarCodeData = (TextView) v.findViewById(R.id.BarCodeData);

// check to see if each individual text view is null.
// if text view is not null (means containing the reference) , it will assign text/value!
if (ProdName != null){
ProdName.setText("Name: ");
}
if (ProdNameValue != null){
ProdNameValue.setText(i.getName());
}
if (ExpiryDate != null){
ExpiryDate.setText("Expiry Date: ");
}
if (ExpiryDateData != null){
ExpiryDateData.setText(i.getValue());
}
if (ExpiryIn != null){
ExpiryIn.setText("Expiry In (Days): ");
}
if (ExpiryInData != null){
ExpiryInData.setText(i.getDays());
}
if (BarCode != null){
BarCode.setText("Quantity: ");
}
if (BarCodeData != null){
BarCodeData.setText(i.getQuantity());
}
}

// the view must be returned to our activity
return v;

}

最佳答案

当您添加到期日期时,您应该在适配器中执行此操作,检查它是否超过 90 天,然后提供您想要的颜色。

关于android - 如何在没有 onClick 的情况下突出显示 ListView 中的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46753722/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com