我有一个ParseObject
子类,但是每当我想得到它的索引时它返回0
,所以mListSectionPos
返回一个零的数组(hachCode
和{{1由于Apache Commons Utils,实现了methd)。
它应该是equals
,而是我正在使用String.valueOf(mListItems.indexOf(beer_section))
,因为它正在运行(或多或少)。有时它会在mListSectionPos.add(mListItems.indexOf(current_item) - 1);
方法上产生裂缝,但也适用于getCurrentSectionPosition()
方法。
所以我的问题是:为什么indexOf()
总是在这段代码中返回indexOf()
?
它基于https://github.com/bhavyahmehta/ListviewFilter - 仅适用于ParseObject列表。以下代码是我对0
的{{1}}的改编here:
MainActivity.java
PiwoSubclass
@Override
protected Void doInBackground(ArrayList<PiwoSubclass>... params) {
mListItems.clear();
mListSectionPos.clear();
ArrayList<PiwoSubclass> items = params[0];
if(mItems != null) {
if (mItems.size() > 0) {
String prev_section = "";
for (PiwoSubclass current_item : items) {
if (isCancelled()) break;
String current_section = current_item.getBeerName().substring(0, 1).toUpperCase(Locale.getDefault());
if (!prev_section.equals(current_section)) {
PiwoSubclass beer_section = null;
beer_section = new PiwoSubclass();
beer_section.setBeerName(current_section);
Log.i("ASD-current", beer_section.getBeerName());
mListItems.add(beer_section);
mListItems.add(current_item);
// array list of section positions
mListSectionPos.add(mListItems.indexOf(current_item) - 1); // that want works although it's way around
// TODO why is that error?
Log.i("ASD-listSectionSize", String.valueOf(mListItems.indexOf(beer_section)));
prev_section = current_section;
} else {
mListItems.add(current_item);
}
}
}
}
return null;
}
现在我public class PiwoSubclass extends ParseObject {
private String objectIdP;
private String marka;
private String marka_lowercase;
public PiwoSubclass() {
}
public String getObjectIdfromParse() {
return this.getObjectId();
}
public String getMarka(){
return this.getString("marka");
}
public String getBrewery(){
return this.getString("brewery");
}
public String getBeerName(){
return this.getString("beer_name");
}
public String getMarka_lowercase() {
return this.getString("marka_lowercase");
}
public void setMarka(String value){
put("marka", value);
}
public void setBeerName(String value){
put("beer_name", value);
}
public void setMarka_lowercase(String value){
put("marka_lowercase", value);
}
@Override
public int hashCode() {
return new HashCodeBuilder(17, 31) // two randomly chosen prime numbers
// if deriving: appendSuper(super.hashCode()).
.append(getObjectIdfromParse())
.toHashCode();
}
@Override
public boolean equals(Object obj) {
//return super.equals(obj);
if (!(obj instanceof PiwoSubclass))
return false;
if (obj == this)
return true;
marka_lowercase = getMarka_lowercase();
PiwoSubclass rhs = (PiwoSubclass) obj;
//Log.i("ASD-subclass", marka + "/" + rhs.getMarka());
return new EqualsBuilder()
// if deriving: appendSuper(super.equals(obj)).
.append(marka_lowercase, rhs.getMarka_lowercase())
.isEquals();
}
的{{1}}例外:
IndexOutOfBounds
答案 0 :(得分:1)
首先,检查mItems
if(mItems != null) {
if (mItems.size() > 0) {
但随后您使用items
for (PiwoSubclass current_item : items) {
/* ... */
}
并忽略mItems
以获取方法的其余部分。我没有看到这两者之间有任何联系。
indexOf()
似乎没有返回0但是1,否则你会ArrayList
充满-1
s
mListSectionPos.add(mListItems.indexOf(current_item) - 1);
我想,不知怎的,你总是检查第一个current_item
,这是mListItems
中的第二个元素。如果您要检查beer_section
- 与原始代码中的current_section
一样 - 代码将按预期工作。
在查看ArrayList.indexOf()
后,最可能的原因是您的PiwoSubclass.equals()
方法比较始终等于第一个非节元素,因为它没有设置啤酒名称或类似条件
因此,修复equals
方法也可以。