0
エラーが行に表示されるString groceryName = recipeNames.get(parentPosition);
エラーの意味を理解していますが、原因を完全には理解していません。奇妙なことに、実際にはグループの一部が拡張されたときにのみ実際に発生します。削除ボタンを押すと、正しい項目が削除されません。つまり、間違ったインデックスを読み込んでいます。すべてのグループが折りたたまれていれば、それはうまく削除されます。どんな助けも大歓迎です。Expandable List Viewグループの位置変数によってインデックスが境界を超えて表示される
package groceryproject.jacob.com.recipelist;
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Typeface;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.ExpandableListView;
import android.widget.TextView;
import java.util.List;
public class ExpandableIngredientListAdapter extends BaseExpandableListAdapter{
private Context mContext;
private List<String> recipeNames; // header titles
private HashMap<String, List<String>> recipeIngredients;
private Button mDeleteButton;
public ExpandableIngredientListAdapter(Context context, List<String> listDataHeader, HashMap<String, List<String>> listChildData) {
this.mContext = context;
this.recipeNames = listDataHeader;
this.recipeIngredients = listChildData;
}
@Override
public Object getChild(int groupPosition, int childPosititon) {
return this.recipeIngredients.get(this.recipeNames.get(groupPosition)).get(childPosititon);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
//Changed from groupPosition to groupPosition - 1
final String childText = (String) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) this.mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.expandable_list_view_item, null);
}
TextView txtListChild = (TextView) convertView.findViewById(R.id.expandable_list_recipe_ingredient_item);
txtListChild.setText(childText);
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return this.recipeIngredients.get(this.recipeNames.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return this.recipeNames.get(groupPosition);
}
@Override
public int getGroupCount() {
return this.recipeNames.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, final ViewGroup parent) {
String headerTitle = (String) getGroup(groupPosition);
if (convertView == null) {
final LayoutInflater infalInflater = (LayoutInflater) this.mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.expandable_list_view_group, null);
mDeleteButton = (Button) convertView.findViewById(R.id.delete_recipe_from_grocery_list_button);
//TODO: Add a dialog to ensure user wants to delete the recipe
mDeleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int parentPosition = groupPosition;
//This is where the error is
String groceryName = recipeNames.get(parentPosition);
RecipeDB dbHelper = new RecipeDB(parent.getContext());
recipeNames.remove(parentPosition);
recipeIngredients.remove(parentPosition);
dbHelper.deleteGrocery(groceryName);
notifyDataSetChanged();
}
});
}
TextView lblListHeader = (TextView) convertView.findViewById(R.id.expandable_list_recipe_header);
lblListHeader.setTypeface(null, Typeface.BOLD);
lblListHeader.setText(headerTitle);
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
編集:これは私が得ているlogcatエラーです。
02-17 23:55:19.558 11403-11403/groceryproject.jacob.com.recipelist E/AndroidRuntime: FATAL EXCEPTION: main
Process: groceryproject.jacob.com.recipelist, PID: 11403
java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at groceryproject.jacob.com.recipelist.ExpandableIngredientListAdapter$1.onClick(ExpandableIngredientListAdapter.java:98)
at android.view.View.performClick(View.java:5204)
at android.view.View$PerformClick.run(View.java:21153)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
エラーログを追加してください –
share logcat/error –
logcatエラーが追加されました。私はそれが何かをするつもりはないと思うが、私はパラメータとして情報を渡す代わりにデータベースから直接引き出すことができるようにコンストラクタを書き直すつもりです。私はまた、私のカスタムオブジェクトに直接アクセスすることによってarraylistを持つハッシュマップの必要性を取り除きたいと思う。私はこれが何かを修正するつもりはないが、それが壊れている場所を追跡するのが少し楽になります。進行状況を更新します。 – knokout1