gpt4 book ai didi

java - 如何停止 toast 和 alertDialog 失去对我的 EditText 过滤器的关注

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:42 24 4
gpt4 key购买 nike

更新:

最新更新 - 添加了 getChanges() 方法。

第二次更新 - 我添加了整个 ShoppingList.java 类。

第一次更新 - 在 2 个人喜欢这个问题但没有答案之后,我已经为这个问题开放了一个赏金。

问题:

我遇到过类似的问题,一旦我开始一个新的 Intent 然后返回到原始页面,我就无法重新过滤我的 ListView。这是通过使用覆盖 onResume() 方法并从另一个过滤器方法中调用我的过滤器代码来解决的。

我遇到的最新问题是,如果在我的应用程序页面上使用 dialogBu​​ilder 或 toast 消息,那么过滤器文本将再次空白,即输入到我的过滤器 EditText 中的任何文本都将被我的过滤器忽略。

以下是突出显示问题的一些屏幕截图:

已加载项目的 ListView:

enter image description here

搜索词被输入到过滤器 EditText 中并正确过滤:

enter image description here

第一项“A”被编辑为“AB”。 toast 消息确认操作:

enter image description here

这就是问题所在,dialogbuilder(这是编辑项目的方式)和 toast 消息已完成,一个新的过滤词被输入到 EditText 中,过滤器不再过滤:

enter image description here

这是我的过滤器代码:

package com.example.flybaseapp;



public class ShoppingList extends ListActivity implements OnClickListener {

Button AddItem;
Button showShop;
ListView showItems;
SimpleCursorAdapter cursorAdapter;
Long itemId;
TextView totalPrice;
String itemDescription;
int itemAmount;
int itemPrice;
EditText itemNameEdit;
DBHandlerShop getCons;
Dialog e1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.shoppinglistlayout);

AddItem = (Button) findViewById(R.id.btnAddItem);
showShop = (Button) findViewById(R.id.btnSearchShops);

showItems = (ListView) findViewById(android.R.id.list);

totalPrice = (TextView) findViewById(R.id.totalListPrice);

AddItem.setOnClickListener(this);
showShop.setOnClickListener(this);

setList();

int setPrice = updateTotal();
totalPrice.setText(Integer.toString(setPrice));

itemNameEdit = (EditText) findViewById(R.id.inputItemName);

showItems.setTextFilterEnabled(true);

itemNameEdit.addTextChangedListener(new TextWatcher() {

@Override
public void afterTextChanged(Editable s) {

}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {

cursorAdapter.getFilter().filter(s.toString());
showItems.refreshDrawableState();

}

});

getCons = new DBHandlerShop(this, null, null);
getCons.open();
cursorAdapter.setFilterQueryProvider(new FilterQueryProvider() {

public Cursor runQuery(CharSequence constraint) {

return getCons.getChanges((constraint.toString()));

}

});

showItems.setAdapter(cursorAdapter);

}

@Override
public void onClick(View clickedAdd) {

switch (clickedAdd.getId()) {

case (R.id.btnAddItem):

show();

break;

case (R.id.btnSearchShops):

Intent checkGPS = new Intent("com.example.flybaseapp.CheckGPS");
startActivity(checkGPS);

break;

}

}

@Override
protected void onListItemClick(ListView l, View v, int position, long idd) {
super.onListItemClick(l, v, position, idd);

itemId = idd;

final CharSequence[] items = { "Edit Item", "Delete Item" };

Builder alertDialogBuilder = new AlertDialog.Builder(ShoppingList.this);

alertDialogBuilder.setTitle("Item Options:");

alertDialogBuilder.setItems(items,
new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int item) {

if (items[item].equals("Edit Item")) {

AlertDialog.Builder builder = new AlertDialog.Builder(
ShoppingList.this);

builder.setTitle("Edit Item");

DBHandlerShop setEdit = new DBHandlerShop(
ShoppingList.this, null, null);

setEdit.open();
String itemName = setEdit.getItem(itemId);
int itemAmount = setEdit.getItemQuan(itemId);
int itemPrice = setEdit.getItemCost(itemId);
setEdit.close();

LinearLayout layout = new LinearLayout(
ShoppingList.this);
layout.setOrientation(LinearLayout.VERTICAL);

final EditText titleBox = new EditText(
ShoppingList.this);
titleBox.setText(itemName);
titleBox.setHint("Item Name:");
layout.addView(titleBox);

final EditText quantityBox = new EditText(
ShoppingList.this);
quantityBox.setText(Integer.toString(itemAmount));
quantityBox.setHint("Item Quantity");
layout.addView(quantityBox);

final EditText priceBox = new EditText(
ShoppingList.this);
priceBox.setText(Integer.toString(itemPrice));
priceBox.setHint("Item Price.");
layout.addView(priceBox);

builder.setView(layout);

builder.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog,
int whichButton) {

Editable valueItem = titleBox
.getText();
Editable valueAmount = quantityBox
.getText();
Editable valuePrice = priceBox
.getText();

String itemDescription = valueItem
.toString();
String s = valueAmount.toString();
int itemAmount = Integer
.parseInt(s);
String a = valuePrice.toString();
int itemPrice = Integer.parseInt(a);

try {
DBHandlerShop update = new DBHandlerShop(
ShoppingList.this,
null, null);

int totalCombined = itemAmount
* itemPrice;

update.open();
update.updateItem(itemId,
itemDescription,
itemAmount, itemPrice);
update.close();

int setPrice = updateTotal();
totalPrice.setText(Integer
.toString(setPrice));

} catch (Exception e) {

Toast.makeText(
getApplicationContext(),
"Items not updated.",
Toast.LENGTH_SHORT)
.show();

} finally {

Toast.makeText(
getApplicationContext(),
"Items updated.",
Toast.LENGTH_SHORT)
.show();

setList();

}

}

});

builder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog,
int whichButton) {

}
});

builder.show();

}

else if (items[item].equals("Delete Item")) {
try {

DBHandlerShop delete = new DBHandlerShop(
ShoppingList.this, null, null);

delete.open();
delete.deleteItem(itemId);
delete.close();

DBHandlerShop findPrice = new DBHandlerShop(
ShoppingList.this, null, null);

findPrice.open();
int returnedCost = findPrice
.getItemCost(itemId);
findPrice.close();

int cost = updateTotal();

int newTotal = cost - returnedCost;
totalPrice.setText(Integer.toString(newTotal));
}

catch (Exception e) {

Toast.makeText(getApplicationContext(),
"Item failed to be deleted.",
Toast.LENGTH_SHORT).show();
}

finally {

Toast.makeText(getApplicationContext(),
"Item deleted from the list.",
Toast.LENGTH_SHORT).show();

setList();
}

}

}

});

alertDialogBuilder.show();

}

@SuppressWarnings("deprecation")
private void setList() {

DBHandlerShop DBShop = new DBHandlerShop(this, null, null);

DBHandlerShop searchItems = new DBHandlerShop(this, null, null);

searchItems.open();

Cursor cursor = searchItems.getItems();

startManagingCursor(cursor);

searchItems.close();

String[] from = new String[] { DBShop.KEY_ITEMSHOP, DBShop.KEY_ITEMNUM,
DBShop.KEY_ITEMPRICE };
int[] to = new int[] { R.id.txtSetItem, R.id.txtSetAmount,
R.id.txtSetPrice };

cursorAdapter = new SimpleCursorAdapter(this, R.layout.setshoppinglist,
cursor, from, to);
showItems.setAdapter(cursorAdapter);

}

private int updateTotal() {

DBHandlerShop total = new DBHandlerShop(this, null, null);

int totalPrice = 0;
total.open();
Cursor totalPrices = total.getTotals();
total.close();

if (totalPrices != null) {

startManagingCursor(totalPrices);
if (totalPrices.moveToFirst()) {

do {
int cost = totalPrices.getInt(3);
int amount = totalPrices.getInt(2);

int totalCost = cost * amount;
totalPrice += totalCost;

} while (totalPrices.moveToNext());

return totalPrice;
}

}

else {

return totalPrice;

}

return 0;

}

private void show() {

AlertDialog.Builder builder = new AlertDialog.Builder(ShoppingList.this);

builder.setTitle("Enter Item Details:");

LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);

final EditText titleBox = new EditText(this);

titleBox.setHint("Item Name:");
layout.addView(titleBox);

final EditText quantityBox = new EditText(this);

quantityBox.setHint("Item Quantity");
layout.addView(quantityBox);

final EditText priceBox = new EditText(this);

priceBox.setHint("Item Price.");
layout.addView(priceBox);

builder.setView(layout);

builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
try {

Editable valueItem = titleBox.getText();
Editable valueAmount = quantityBox.getText();
Editable valuePrice = priceBox.getText();

itemDescription = valueItem.toString();
String s = valueAmount.toString();
itemAmount = Integer.parseInt(s);
String a = valuePrice.toString();
itemPrice = Integer.parseInt(a);

DBHandlerShop addItem = new DBHandlerShop(
ShoppingList.this, null, null);
addItem.open();
addItem.insertItems(itemDescription, itemAmount, itemPrice);
addItem.close();

} catch (Exception e) {

Toast.makeText(getApplicationContext(),
"Item failed to be added", Toast.LENGTH_SHORT)
.show();

} finally {

Toast.makeText(getApplicationContext(),
"Item added to your list", Toast.LENGTH_SHORT)
.show();

int cost = updateTotal();
totalPrice.setText(Integer.toString(cost));

setList();

}

}

});

builder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {

}
});

builder.show();

}

@Override
protected void onResume() {
super.onResume();

setList();

showItems.setTextFilterEnabled(true);

itemNameEdit.addTextChangedListener(new TextWatcher() {

@Override
public void afterTextChanged(Editable s) {

}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {

cursorAdapter.getFilter().filter(s.toString());
showItems.refreshDrawableState();

}

});

getCons = new DBHandlerShop(this, null, null);
getCons.open();
cursorAdapter.setFilterQueryProvider(new FilterQueryProvider() {

public Cursor runQuery(CharSequence constraint) {

return getCons.getChanges((constraint.toString()));

}

});

showItems.setAdapter(cursorAdapter);
}

}

来自数据库处理程序类的 getChanges():

public Cursor getChanges(String constraintPassed) {

String [] columns = new String[]{KEY_ROWSHOPID, KEY_ITEMSHOP, KEY_ITEMNUM, KEY_ITEMPRICE};
Cursor c = null;
if(constraintPassed.equals(""))
{
c = ourDatabase.query(DATABASE_TABLESHOP, columns, null, null, null, null, null);

}

else
{
c = ourDatabase.query(DATABASE_TABLESHOP, columns, KEY_ITEMSHOP + " LIKE'" + constraintPassed + "%'", null, null, null, KEY_ITEMSHOP + " ASC", null);
}

if( c != null)
{
c.moveToFirst();

}
return c;
}

编辑完成后是否需要实现生命周期方法?如果可以,有人可以将我推向正确的方向,因为我已经尝试过 onResume() 和 onRestart() 无济于事。

最佳答案

更新过滤器后,尝试在您的适配器上调用 notifyDataSetChanged()。这应该通知 ListView 它也需要刷新其数据。

关于java - 如何停止 toast 和 alertDialog 失去对我的 EditText 过滤器的关注,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15659230/

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