奇妙な問題があります..チェックボックスを含むリストビューがあります..ユーザーにそれらを選択してもらい、選択したアイテムを取得してループに追加します..以前ArrayAdapter
はすべてが良いと思っていましたが、チェックすると最後のアイテムで初めてエラーが発生しましたが、他のチェックボックスを初めてチェックすると、エラーが発生しませんでした..ここはclicklistenerにあります
package co.tosca.persianpoem;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.database.Cursor;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
public class InteractiveArrayAdapter extends ArrayAdapter<String> {
private final List<String> list;
private final Activity context;
public ArrayList<String> items = new ArrayList<String>();
public ArrayList<String> main_db_id = new ArrayList<String>();
public List<String> database_ids = new ArrayList<String>();
public InteractiveArrayAdapter(Activity context, List<String> list) {
super(context, R.layout.database_list_item, list);
this.context = context;
this.list = list;
persian_poem_class main=new persian_poem_class(context);
String mySQL = "SELECT DISTINCT id as _id "+","+ClubCP.COLUMN_POET_ID+","+ClubCP.COLUMN_PARENT_ID
+ " from cat"
+ " where " + ClubCP.COLUMN_PARENT_ID+"= 0 "
+ " order by " + ClubCP.COLUMN_POET_ID;
Cursor c= main.getData(mySQL);
c.moveToFirst();
while(!c.isAfterLast()) {
main_db_id.add(c.getString(c.getColumnIndex(ClubCP.COLUMN_POET_ID))); //add the item
c.moveToNext();
}
Log.i("main_db_id", main_db_id.toString());
File path=new File(ClubCP.SDcardPath+"/temp/database/");
database_ids = main.directoryPath(path,true);
Log.i("database_ids", database_ids.toString());
}
public ArrayList<String> getSelectedItems(){
return items;
}
@Override
public View getView (int position, View convertView, ViewGroup parent) {
View itemView = convertView ;
final int pos =position;
if (itemView == null) {
LayoutInflater inflator = context.getLayoutInflater();
itemView = inflator.inflate(R.layout.database_list_item, null);
CheckBox cb = (CheckBox)itemView.findViewById(R.id.chk_database_list_item);
TextView tv =(TextView)itemView.findViewById(R.id.txt_database_status);
Log.i("aray adapter","set caption");
cb.setText(list.get(position));
for(int i=0;i<database_ids.size();i++){
boolean found = false;
for(int j=0;j<main_db_id.size();j++){
if((database_ids.get(position).equals(main_db_id.get(j)))){
found = true;
break;
}
}
if(found) {
tv.setText(context.getString(R.string.is_in_db));
tv.setTextColor(Color.parseColor(context.getString(R.color.red)));
} else {
tv.setText(context.getString(R.string.is_not_in_database));
tv.setTextColor(Color.parseColor(context.getString(R.color.green)));
}
}
cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CheckBox myCb = (CheckBox)v;
if (myCb.isChecked()) {
items.add(pos, list.get(pos));
Toast.makeText(context, items.toString(), 1).show();
} else {
items.remove(pos);
}
}
});
}
return itemView;
}
}
ここにエラーがあります
04-10 10:24:51.722: E/AndroidRuntime(1938): FATAL EXCEPTION: main
04-10 10:24:51.722: E/AndroidRuntime(1938): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0
04-10 10:24:51.722: E/AndroidRuntime(1938): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
04-10 10:24:51.722: E/AndroidRuntime(1938): at java.util.ArrayList.add(ArrayList.java:143)
04-10 10:24:51.722: E/AndroidRuntime(1938): at co.tosca.persianpoem.InteractiveArrayAdapter$1.onClick(InteractiveArrayAdapter.java:97)
04-10 10:24:51.722: E/AndroidRuntime(1938): at android.view.View.performClick(View.java:3534)
04-10 10:24:51.722: E/AndroidRuntime(1938): at android.widget.CompoundButton.performClick(CompoundButton.java:104)
04-10 10:24:51.722: E/AndroidRuntime(1938): at android.view.View$PerformClick.run(View.java:14263)
04-10 10:24:51.722: E/AndroidRuntime(1938): at android.os.Handler.handleCallback(Handler.java:605)
04-10 10:24:51.722: E/AndroidRuntime(1938): at android.os.Handler.dispatchMessage(Handler.java:92)
04-10 10:24:51.722: E/AndroidRuntime(1938): at android.os.Looper.loop(Looper.java:137)
04-10 10:24:51.722: E/AndroidRuntime(1938): at android.app.ActivityThread.main(ActivityThread.java:4441)
04-10 10:24:51.722: E/AndroidRuntime(1938): at java.lang.reflect.Method.invokeNative(Native Method)
04-10 10:24:51.722: E/AndroidRuntime(1938): at java.lang.reflect.Method.invoke(Method.java:511)
04-10 10:24:51.722: E/AndroidRuntime(1938): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-10 10:24:51.722: E/AndroidRuntime(1938): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-10 10:24:51.722: E/AndroidRuntime(1938): at dalvik.system.NativeStart.main(Native Method)
バンドリー外と表示されているので、問題はリストビューにアイテムを追加することだと思いますが、理由はわかりません:(
ここに新しいlogcatがあります
04-10 20:23:14.947: D/dalvikvm(7732): GC_FOR_ALLOC freed 45K, 3% free 7646K/7875K, paused 23ms
04-10 20:23:14.947: I/dalvikvm-heap(7732): Grow heap (frag case) to 8.968MB for 1536016-byte allocation
04-10 20:23:14.977: D/dalvikvm(7732): GC_CONCURRENT freed <1K, 3% free 9145K/9415K, paused 1ms+1ms
04-10 20:23:15.097: D/libEGL(7732): loaded /system/lib/egl/libGLES_android.so
04-10 20:23:15.117: D/libEGL(7732): loaded /system/lib/egl/libEGL_adreno200.so
04-10 20:23:15.137: D/libEGL(7732): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
04-10 20:23:15.147: D/libEGL(7732): loaded /system/lib/egl/libGLESv2_adreno200.so
04-10 20:23:15.227: I/Adreno200-EGLSUB(7732): <ConfigWindowMatch:2078>: Format RGBA_8888.
04-10 20:23:15.247: D/OpenGLRenderer(7732): Enabling debug mode 0
04-10 20:23:17.087: D/dalvikvm(7732): GC_FOR_ALLOC freed 13K, 3% free 9167K/9415K, paused 12ms
04-10 20:23:17.097: I/dalvikvm-heap(7732): Grow heap (frag case) to 10.454MB for 1536016-byte allocation
04-10 20:23:17.127: D/dalvikvm(7732): GC_CONCURRENT freed <1K, 3% free 10667K/10951K, paused 2ms+5ms
04-10 20:23:17.177: D/TextLayoutCache(7732): Using debug level: 0 - Debug Enabled: 0
04-10 20:23:17.197: I/Adreno200-EGLSUB(7732): <ConfigWindowMatch:2078>: Format RGBA_8888.
04-10 20:23:17.338: D/OpenGLRenderer(7732): Flushing caches (mode 0)
04-10 20:23:19.057: I/file_list(7732): [khiam.db, prvin-aEtsami.db]
04-10 20:23:19.057: I/main_db_id(7732): [3]
04-10 20:23:19.077: I/database_ids(7732): [3, 8]
04-10 20:23:19.087: I/aray adapter(7732): set caption
04-10 20:23:19.107: I/Adreno200-EGLSUB(7732): <ConfigWindowMatch:2078>: Format RGBA_8888.
04-10 20:23:19.117: I/aray adapter(7732): set caption
04-10 20:23:19.137: I/aray adapter(7732): set caption
04-10 20:23:19.297: D/OpenGLRenderer(7732): Flushing caches (mode 0)
04-10 20:23:20.387: I/getSelectedItems_befor(7732): []
04-10 20:23:20.387: I/list(7732): [khiam.db, prvin-aEtsami.db]
04-10 20:23:20.387: D/AndroidRuntime(7732): Shutting down VM
04-10 20:23:20.387: W/dalvikvm(7732): threadid=1: thread exiting with uncaught exception (group=0x2b542210)
04-10 20:23:20.397: E/AndroidRuntime(7732): FATAL EXCEPTION: main
04-10 20:23:20.397: E/AndroidRuntime(7732): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0
04-10 20:23:20.397: E/AndroidRuntime(7732): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
04-10 20:23:20.397: E/AndroidRuntime(7732): at java.util.ArrayList.add(ArrayList.java:143)
04-10 20:23:20.397: E/AndroidRuntime(7732): at co.tosca.persianpoem.InteractiveArrayAdapter$1.onClick(InteractiveArrayAdapter.java:102)
04-10 20:23:20.397: E/AndroidRuntime(7732): at android.view.View.performClick(View.java:3534)
04-10 20:23:20.397: E/AndroidRuntime(7732): at android.widget.CompoundButton.performClick(CompoundButton.java:104)
04-10 20:23:20.397: E/AndroidRuntime(7732): at android.view.View$PerformClick.run(View.java:14263)
04-10 20:23:20.397: E/AndroidRuntime(7732): at android.os.Handler.handleCallback(Handler.java:605)
04-10 20:23:20.397: E/AndroidRuntime(7732): at android.os.Handler.dispatchMessage(Handler.java:92)
04-10 20:23:20.397: E/AndroidRuntime(7732): at android.os.Looper.loop(Looper.java:137)
04-10 20:23:20.397: E/AndroidRuntime(7732): at android.app.ActivityThread.main(ActivityThread.java:4441)
04-10 20:23:20.397: E/AndroidRuntime(7732): at java.lang.reflect.Method.invokeNative(Native Method)
04-10 20:23:20.397: E/AndroidRuntime(7732): at java.lang.reflect.Method.invoke(Method.java:511)
04-10 20:23:20.397: E/AndroidRuntime(7732): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-10 20:23:20.397: E/AndroidRuntime(7732): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-10 20:23:20.397: E/AndroidRuntime(7732): at dalvik.system.NativeStart.main(Native Method)