- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以将数据添加到可扩展 ListView 中,但是当我的屏幕变满并且我开始滚动时,子数据开始重新定位自己。请检查屏幕截图
在此屏幕截图中,六月的唯一支出是钢包,但当我滚动时,它会更改为DStv Bills,这不应该是这样。 DStv Bills 数据为 7 月数据。
但是当我单击Dstv Bills项目时,弹出对话框会给出Laddle的正确信息。
我的代码如下
1) 我的 ExpandableListAdapter 类
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
private Context context;
private ArrayList<ParentRow> parentRowArrayList;
private ArrayList<ParentRow> originalList;
public MyExpandableListAdapter(Context context, ArrayList<ParentRow> originalList) {
this.context = context;
this.parentRowArrayList= new ArrayList<>();
this.parentRowArrayList.addAll(originalList);
this.originalList = new ArrayList<>();
this.originalList.addAll(originalList);
}
@Override
public int getGroupCount() {
return parentRowArrayList.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return parentRowArrayList.get(groupPosition).getChildList().size();
}
@Override
public Object getGroup(int groupPosition ) {
return parentRowArrayList.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return parentRowArrayList.get(groupPosition).getChildList().get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition ;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean b, View convertView, ViewGroup viewGroup) {
ParentRow parentRow = (ParentRow) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.expandable_parent_list_group, null);
}
TextView parentHeaderText = (TextView) convertView
.findViewById(R.id.parentHeaderText);
TextView parentHeaderAmount= (TextView) convertView
.findViewById(R.id.parentHeaderAmount);
parentHeaderText.setText(parentRow.getName().trim());
parentHeaderAmount.setText(parentRow.getAmount().trim());
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean b, View convertView, ViewGroup viewGroup) {
ChildRow childRow = (ChildRow) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.expandable_child_list_item, null);
ImageView childIcon = (ImageView) convertView.findViewById(R.id.ivExp);
childIcon.setImageResource(childRow.getIcon());
final TextView childTitleText = (TextView) convertView
.findViewById(R.id.childTitleText);
final TextView childAmountText = (TextView) convertView
.findViewById(R.id.childAmountText);
childTitleText.setText(childRow.getTitle().trim());
childAmountText.setText(childRow.getAmount()+"");
// final View finalConvertView =convertView;
}
return convertView;
}
@Override
public boolean isChildSelectable(int i, int i1) {
return true;
}
public void filterData(String query){
query=query.toLowerCase();
parentRowArrayList.clear();
if(query.isEmpty()){
parentRowArrayList.addAll(originalList);
}else{
for(ParentRow parentRow:originalList){
ArrayList<ChildRow> childList = parentRow.getChildList();
ArrayList<ChildRow> newList = new ArrayList<>();
for(ChildRow childRow:childList){
if(childRow.getTitle().toLowerCase().contains(query)){
// Toast.makeText(context, childRow.getTitle().toString(), Toast.LENGTH_SHORT).show();
newList.add(childRow);
}
}//end for ChildRow childRow:childList
if(newList.size()>0){
ParentRow newParentRow = new ParentRow(parentRow.getName(),parentRow.getAmount(),newList);
parentRowArrayList.add(newParentRow);
}
} // end for ParentRow parentRow:originalList
} //end else
notifyDataSetChanged();
}
public ArrayList<ParentRow> getparentRowArrayList() {
return parentRowArrayList;
}
}
public void filterData(String query){
query = query.toLowerCase();
Log.v("MyListAdapter", String.valueOf(_listDataHeader.size()));
_listDataHeader.clear();
if(query.isEmpty()){
_listDataHeader.addAll(originalList);
}
else {
for(String continent: originalList){
String countryList = continent;
ArrayList<String> newList = new ArrayList<>();
if(countryList.toLowerCase().contains(query) ||
countryList.toLowerCase().contains(query)){
newList.add(countryList);
}
if(newList.size() > 0){
// Continent nContinent = new Continent(continent.getName(),newList);
_listDataHeader.add(String.valueOf(newList));
}
}
}
Log.v("MyListAdapter", String.valueOf(_listDataHeader.size()));
notifyDataSetChanged();
}
}
2)我的 ExpandableListview 类中的函数
private void displayList(){
loadData();
listAdapter = new MyExpandableListAdapter(MyExpandableListViewClass.this, parentRowArrayList);
myList.setAdapter(listAdapter);
}
private void loadData() {
//listDataHeader = new ArrayList<String>();
int monthVal=0;
for (monthVal = 1; monthVal <= 12; monthVal++) {
ArrayList <ChildRow> childRows = new ArrayList<>();
ParentRow parentRow ;
String listDataHeaderName="Default";
switch (monthVal) {
case 1:
listDataHeaderName = "January";
// listDataHeader.add(listDataHeaderName);
break;
case 2:
listDataHeaderName = "February";
//listDataHeader.add(listDataHeaderName);
break;
case 3:
listDataHeaderName = "March";
// listDataHeader.add(listDataHeaderName);
break;
case 4:
listDataHeaderName = "April";
// listDataHeader.add(listDataHeaderName);
break;
case 5:
listDataHeaderName = "May";
//listDataHeader.add(listDataHeaderName);
break;
case 6:
listDataHeaderName = "June";
// listDataHeader.add(listDataHeaderName);
break;
case 7:
listDataHeaderName = "July";
// listDataHeader.add(listDataHeaderName);
break;
case 8:
listDataHeaderName = "August";
// listDataHeader.add(listDataHeaderName);
break;
case 9:
listDataHeaderName = "September";
//listDataHeader.add(listDataHeaderName);
break;
case 10:
listDataHeaderName = "October";
//listDataHeader.add(listDataHeaderName);
break;
case 11:
listDataHeaderName = "November";
// listDataHeader.add(listDataHeaderName);
break;
case 12:
listDataHeaderName = "December";
// listDataHeader.add(listDataHeaderName);
break;
}
//Recordingexpenditure for previous years
//Formatting Amounts
DecimalFormat formatter = new DecimalFormat("#,###.00");
int counter = 0;
int mYear=0;
String fin_amount=null;
String date="herh";
String amount=null;
String title, category="uu";
usersManager= new UsersManager(this);
id = usersManager.getUserId(getUserEmail());
expenseManager.sendID(id);
allExpenses = expenseManager.getMonthExpenses(monthVal);
for (Expense expense : allExpenses) {
allTitles.add(expense.getTitle());
counter++;
}
//Get date and year
if (allExpenses.isEmpty()) {
continue;
}
// else if(mYear!=current_year){
// Toast.makeText(this, "Not in 2017", Toast.LENGTH_SHORT).show();
// }
else if (!allExpenses.isEmpty()){
//Toast.makeText(this, " IN " +listDataHeaderName, Toast.LENGTH_SHORT).show();
// Getting all the titles
for (int i = 0; i < counter; i++) {
title = allTitles.get(i);
expense = expenseManager.getExpenseExcel(title);
// date= expense.getDate();
// String str[] = date.split("-");
// mYear = Integer.parseInt(str[0]);
// int mMonth=Integer.parseInt(str[1])-1;
category = expense.getCategory();
amount =formatter.format(expense.getAmount());
title = expense.getTitle();
//Child Data
getChildData(title,category,amount, childRows);
///Toast.makeText(this, expense.getDate().toString() +"-" +i, Toast.LENGTH_SHORT).show();
//Get the original amount, format it, and append CUrrency
double header_amount=overviewManager.getTotalExpenditurePerMonth_Budget
(monthVal);
//Toast.makeText(this, "" + header_amount, Toast.LENGTH_SHORT).show();
fin_amount = (currencyManager.getCurrency(MyExpandableListViewClass.this) + " " + header_amount);
}
parentRow = new ParentRow(listDataHeaderName,fin_amount,childRows);
parentRowArrayList.add(parentRow);
allTitles.clear();
allExpenses.clear();
}
}
}
private void getChildData(String title, String category, String child_amount, ArrayList<ChildRow> childRows) {
String fin_amount = (currencyManager.getCurrency(MyExpandableListViewClass.this) + " " + child_amount);
switch (category){
case "Food and Drinks":
childRows.add(new ChildRow(R.drawable.food, fin_amount,title));
break;
case "Transportation":
childRows.add(new ChildRow(R.drawable.transpo,fin_amount, title));
break;
case "Health":
childRows.add(new ChildRow(R.drawable.health,fin_amount, title));
break;
case "Housing":
childRows.add(new ChildRow(R.drawable.house, fin_amount,title));
break;
case "Education":
childRows.add(new ChildRow(R.drawable.education, fin_amount,title));
break;
case "Technical":
childRows.add(new ChildRow(R.drawable.technical,fin_amount, title));
break;
case "Clothing":
childRows.add(new ChildRow(R.drawable.clothing,fin_amount, title));
break;
case "Utilities":
childRows.add(new ChildRow(R.drawable.utilities,fin_amount, title));
break;
case "Other":
childRows.add(new ChildRow(R.drawable.etc,fin_amount, title));
break;
default:
childRows.add(new ChildRow(R.drawable.etc,fin_amount, title));
}
}
最佳答案
问题是由于对象重用造成的。该对象已经创建,因此我们应该设置新值。如果您没有设置,它将显示旧值。
您在组 View 中做得正确,但在 subview 中,您做错了。一直设置这个值就可以正常工作了
试试这个,
@Override
public View getChildView(int groupPosition, int childPosition, boolean b, View convertView, ViewGroup viewGroup) {
ChildRow childRow = (ChildRow) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.expandable_child_list_item, null);
}
ImageView childIcon = (ImageView) convertView.findViewById(R.id.ivExp);
childIcon.setImageResource(childRow.getIcon());
final TextView childTitleText = (TextView) convertView
.findViewById(R.id.childTitleText);
final TextView childAmountText = (TextView) convertView
.findViewById(R.id.childAmountText);
childTitleText.setText(childRow.getTitle().trim());
childAmountText.setText(childRow.getAmount()+"");
// final View finalConvertView =convertView;
return convertView;
}
关于java - 在滚动的可扩展 ListView 中重复并重新定位 'children',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45111086/
我想知道如何考虑需要您做出某些选择才能看到最终结果的搜索系统。我说的是 select 表单,您可以在其中根据您的选择继续操作,然后您会看到结果。 下面描述了我正在谈论的一个随机示例。想象一下 Init
您好,我目前正在编写一些软件来管理我们的库存。我搜索了 2 个表 master_stock(保存每一个股票代码和描述)库存(保存库存代码、地点、数量...) 一切都很好,但这是我遇到的问题。 假设我的
我有 2 个表,我想合并其数据。id 是我的关键字段(增量且不同)。表1和表2字段说明例如:id - 名称 - 值 我想将表2的所有数据插入表1,它们有不同的数据,但在某些行中有相同的id。 所以当我
我正在努力解决汇编中的一个问题,我必须获取十六进制代码的第一个字节 (FF) 并将其复制到整个值中: 0x045893FF input 0xFFFFFFFF output 我所做的
我有 Eclipse Indigo 版本,我可以在其中运行 Java 和 C++ 项目。 但我只想使用另一个 Eclipse 来编写 C++ 项目。所以我将 eclipse(不是工作区)的源文件夹复制
This question already has answers here: What is a NullPointerException, and how do I fix it? (12个答案)
This question already has answers here: Numbering rows within groups in a data frame (8个答案) 5个月前关闭。
我知道用q记录到寄存器中,但我想知道是否可以设置一些东西来快速调用最后一个记录,就像一样。 回顾最后一个简短的编辑命令(有关 的讨论请参阅 here。)。 我知道@@,但它似乎只有在执行@z之后才起作
来自 Eclipse 并且一直习惯于复制行,发现 Xcode 没有这样的功能是很奇怪的。或者是吗? 我知道可以更改系统范围的键绑定(bind),但这不是我想要的。 最佳答案 要删除一行:Ctrl-A
假设我有一个包含元素的列表,例如[1,2,3,4,5,6,7,8]。我想创建长度为 N 的该元素的所有排列。 因此,对于N = 4,它将是[[1,1,1,1],[1,1,1,2],[1,1,2,1],
我有一个带有 JMenu 的 JFrame。当我在某些情况下添加包含图像的 JPanel 时,程序首次启动时菜单会重复。调整大小时重复的菜单消失。任何建议都非常感激。谢谢。代码如下: public c
我正在尝试查找目录中文件的重复项。 我对这个 block 有一个问题,它以文件地址作为参数: public void findFiles(ArrayList list){ HashMap hm
我知道这个问题已经发布并且已经给出了答案,但我的情况不同,因为我在单个方法上填充多个下拉列表,所以如果我点击此链接 After every postback dropdownlist items re
我正在尝试为我的日历应用程序实现重复模式。我希望它的工作方式与 Outlook 在您设置重复约会时的工作方式相同。 public async Task> ApplyReccurrencePeriod
我有一个利用 cookie 来支持准向导的应用程序(即,它是一组相互导航的页面,它们必须以特定顺序出现以进行注册)。 加载 Logon.aspx 页面时 - 默认页面 - 浏览器 cookie 看起来
我有 3 个输入,代码检查它们是否为空,如果为空,则将变量值添加到输入中。 所以我有 3 个具有值的变量: var input1text = "something here"; var input2t
根据数组的长度更改数组的每个元素的最佳方法是什么? 例如: User #1 input = "XYZVC" Expected Output = "BLABL" User #2 input = "XYZ
我在让 Algolia 正常工作时遇到了一些麻烦。我正在使用 NodeJS 并尝试在我的数据库和 Algolia 之间进行一些同步,但由于某种原因似乎随机弹出大量重复项。 如您所见,在某些情况下,会弹
遵循以下规则: expr: '(' expr ')' #exprExpr | expr ( AND expr )+ #exprAnd | expr ( OR expr )+ #exprO
我有一个布局,我想从左边进入并停留几秒钟,然后我希望它从右边离开。为此,我编写了以下代码: 这里我在布局中设置数据: private void loadDoctor(int doctorsInTheL
我是一名优秀的程序员,十分优秀!