안녕하세요 어플을 처음으로 만들어보고 있어서 아직 많이 부족한 학생입니다.
CusorAdapter를 이용해 DB를 Custom listView(Textview, TextView, Button으로 구성되어 있습니다.) 에 띄우고 나서 Item들을 클릭할때 수행되는 기능에 대해 구현 중입니다.
TextView는 OnItemClickListner을 이용해 클릭하도록 하였고 Button은 클릭시 DB의 값 일부를 업데이트 시키도록 구성하고 싶습니다. 그런데 OnItemClickListner로 잘 안되어 Adapter내에서 클릭이 가능하도록 하였지만 DBHelper가 불러지지 않아 db수정이 안됩니다. 구글링으로 여러방법 찾아보았지만 계속 오류가 떠 질문 드립니다.
DBHelper와 Adapter class는 따로 구현하였습니다.
어떻게 하면 listView의 버튼 클릭시 db값이 수정되도록 할 수 있는지 알려주시면 감사하겠습니다.
public class DBAdapter extends CursorAdapter {
//DBHelper dbHelper;
//SQLiteDatabase db;
//String sql;
public DBAdapter(Context context, Cursor c){
super (context ,c );
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.list_item, parent, false);
return v;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
final TextView priority = (TextView)view.findViewById(R.id.textPriority);
final TextView name = (TextView)view.findViewById(R.id.textName);
final Button button = (Button) view.findViewById(R.id.button);
priority.setText(cursor.getString(cursor.getColumnIndex("priority")));
name.setText(cursor.getString(cursor.getColumnIndex("name")));
int position = cursor.getPosition();
button.setTag(position);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//버튼 클릭은 잘 되는데 db수정이 잘 안되고 있습니다ㅠㅠ
name.setTextColor(Color.rgb(246,187,67));
// db = dbHelper.getWritableDatabase(); <- 이부분에서 오류가 납니다
// sql = String.format("UPDATE t3 SET finish = 1;");
// db.execSQL(sql);
}
});
}
}
java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.database.sqlite.SQLiteOpenHelper.getWritableDatabase()' on a null object reference
at com.example.myyou.todays.DBAdapter$1.onClick(DBAdapter.java:50)
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//int bntPosition = (Integer) view.getTag();
// Log.d("버튼","버튼= "+bntPosition);
cursor.moveToPosition(position);
String str = cursor.getString(cursor.getColumnIndex("name"));
String str1 = cursor.getString(cursor.getColumnIndex("memo"));
Log.d("클릭",str);
}
});
Main에서 각 Custom listView의 Item에 대한 클릭은 다음과 같이 하였습니다.