【发布时间】:2013-12-13 13:35:12
【问题描述】:
我有一个在 ListView 中显示记录的类。用户可以删除记录,并且每次用户删除记录时,我都想用新值从我的布局中更新 TextView。
我有一个 XML 布局页面,这是一个引用自定义适配器的类。当用户删除一条记录时,我从另一个类(HistoryOverview.java)触发一个函数,我想在其中更新文本视图。 问题是我的所有代码都没有错误,但我的 TextView 没有更新值。我是在这里遗漏了什么还是做错了什么?
1.布局.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TableLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TableRow
android:paddingLeft="5dp"
android:paddingTop="5dp" >
<ImageView
android:id="@+id/barGraphUsed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|bottom"
android:background="#808080"
android:contentDescription="@string/emptyTextfield" />
</TableRow>
<TextView
android:id="@+id/overviewFinances"
android:paddingLeft="5dp"
android:paddingTop="5dp"
android:textColor="#97ca3e"
android:text="@string/emptyTextfield"
android:textSize="16sp" />
</TableLayout>
<ListView
android:id="@+id/listViewFinances"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:dividerHeight="1dp"
android:paddingBottom="50dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="20dp" />
</LinearLayout>
2。自定义适配器
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.listviewitem_history, parent,
false);
//if users delete something
final ImageView deleteFinance = (ImageView) rowView.findViewById(R.id.deleteFinance);
//on long click to really delete the category.
deleteFinance.setOnLongClickListener(new AdapterView.OnLongClickListener(){
public boolean onLongClick(View view) {
//getting id that we set in the tag a bit higher.
String financeId = view.getTag().toString();
//now convert to long to input in the db.
long deleteId = Long.valueOf(financeId);
//delete the note from the db, from the listview and update the adapter.
db.deleteFinance(deleteId);
values.remove(position);
getTotalIncomesAndExpenses();
notifyDataSetChanged();
return true;
}
});
//return the view.
return rowView;
}
public void getTotalIncomesAndExpenses(){
HistoryOverview HO = new HistoryOverview();
//all the numbers get calculated here etc but I would like to keep this code private
//its rather sensitive data. But all those variables are okay and do work.
HO.notifyChange(sumExpenses, sumIncomes, currency);
}
所以当我完成删除记录等时,我会使用我的 HistoryOverview 类中的函数 notifyChange。然后我来这个函数:
3. HistoryOverview.Java
public void notifyChange(int sumExpenses, int sumIncomes, String currency){
Log.i("sumExpenses, incomes", String.valueOf(sumExpenses + " " + sumIncomes));
LayoutInflater li = (LayoutInflater)contextForAdapter.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View vi = li.inflate(R.layout.activity_historyoverview, null);
ListView listViewFinances = (ListView)vi.findViewById(R.id.listViewFinances);
listViewFinances.setVisibility(vi.GONE);
listViewFinances.setVisibility(View.GONE);
vi.bringToFront();
TextView tv = (TextView)vi.findViewById(R.id.overviewFinances);
String text = "Sum incomes: " + sumIncomes + currency
+ "\tSum expenses: " + sumExpenses + currency
+ "\tMoney left: " + (sumIncomes - sumExpenses)
+ currency;
tv.setText(text);
tv.setBackgroundColor(Color.RED);
Toast.makeText(contextForAdapter,
text, Toast.LENGTH_LONG).show();
Log.i("tv:", tv.getText().toString());
}
我最终会在哪里更新 textView。但不知何故,它永远不会更新,尽管我的 toast 测试功能有效并且我的日志都显示了 textView 不会更新的正确值。谁能告诉我我做错了什么或我错过了什么?
【问题讨论】:
-
从哪里获取列表视图项?
-
我直接从数据中获取它们并将它们插入到列表视图中。
标签: android android-layout android-listview custom-adapter