0
줄에 오류가 있음 String groceryName = recipeNames.get(parentPosition);
오류의 의미를 이해하지만 그 원인을 완전히 이해하지 못합니다. 이상하게도 그룹의 일부가 확장되면 실제로 발생합니다. 삭제 버튼을 누르면 잘못된 항목을 읽는 중 올바른 항목이 삭제되지 않습니다. 모든 그룹이 축소되면 삭제됩니다. 어떤 도움이라도 대단히 감사합니다.확장 가능한 목록보기 그룹 위치 변수로 인해 인덱스의 범위가 벗어납니다.
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)
오류 로그를 추가하십시오. –
공유 logcat/error –
logcat 오류가 추가되었습니다. 그게 아무것도 할 수 있을지 모르겠지만, 매개 변수로 정보를 전달하는 대신 데이터베이스에서 직접 가져올 수 있도록 생성자를 다시 작성하려고합니다. 나는 또한 내 사용자 정의 객체에 직접 액세스하여 arraylist가있는 해시 맵에 대한 필요성을 제거하려고합니다. 이 문제가 해결되지 않을 거라는 것을 압니다 만, 그것이 깨지기 쉬운 곳을 추적하는 것이 더 쉬워 질 것입니다. 진행 상황을 업데이트하겠습니다. – knokout1