AlarmMain.java

protected void init() {
  // TODO Auto-generated method stub
  try{
   mCorsur = getAlarmCursorList(this);  // 디비 호출
   }catch(Exception e){
    Log.e(TAG, "e "+e);
   }

   alarmCursorAdapter = new AlarmCursorAdapter(this, mCorsur);  //커서어뎁터 생성
   alarmCursorAdapter.notifyDataSetChanged();
   
   alarm_list_view = (ListView)findViewById(R.id.alarm_list); // 리스트뷰 생성
   alarm_list_view.setAdapter(alarmCursorAdapter);//커서어뎁터 셋
   alarm_list_view.setOnItemClickListener(this); // 온클릭 이벤트

}

 

 

@Override
 public void onItemClick(AdapterView parent, View view, int pos, long id) {
  // TODO Auto-generated method stub
  final Cursor cursor = (Cursor) alarm_list_view.getAdapter()
                .getItem(pos);
  Alarm alarm = new Alarm(cursor.getInt(0), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getInt(4), cursor.getString(5),  cursor.getString(6), cursor.getString(7), cursor.getString(8), cursor.getString(9), cursor.getString(10), cursor.getString(11));
  Intent intent = new Intent(AlarmMain.this, SetAlarm.class);
  intent.putExtra(ALARMID, alarm.getId());
  intent.putExtra(MODE, UPDATEMODE);
  startActivity(intent);
 }

======================================================================================

//커서어뎁터

public class AlarmCursorAdapter extends CursorAdapter{

public AlarmCursorAdapter(Context context, Cursor cursor) {
  super(context, cursor);
  // TODO Auto-generated constructor stub
  mContext=context;
 }

@Override
 public void bindView( View view, final Context context, Cursor cursor) {
  // TODO Auto-generated method stub
  final Alarm alarm = new Alarm(cursor.getInt(0), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getInt(4), cursor.getString(5), cursor.getString(6), cursor.getString(7), cursor.getString(8), cursor.getString(9), cursor.getString(10), cursor.getString(11));
  

View indicator = view.findViewById(R.id.indicator);
  final ImageView iv = (ImageView)indicator.findViewById(R.id.button_toggle);

 

  boolean iv_toggle = Boolean.valueOf(alarm.getEnabled());

if(iv_toggle)iv.setImageDrawable(context.getResources().getDrawable(R.drawable.alarm_on));
  else   iv.setImageDrawable(context.getResources().getDrawable(R.drawable.alarm_off));

 

 indicator.setOnClickListener(new OnClickListener() {   
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    if(Boolean.valueOf(alarm.getEnabled())){ 
     update_values(alarm.getId(), false);     //db 업데이트 하는부분
    }else{
     update_values(alarm.getId(), true); //db 업데이트 하는부분
        }
   }
  });

}

 

질문 드립니다.

update_values(alarm.getId(), false); 부분에서 디비를 업데이트를 하면

ListView를  갱신해서 아이콘 모양을 바꿔줘야되는데 안바뀜

ImageView 부분을 클릭하면 onItemClick 이벤트를 타지않음.

 

결론.

처음 디비를 읽어와 어뎁터를 생성하고, 뷰를 생성하여

생성된 뷰에 어뎁터를 넣어주었다.

현상태에서 리스트상의 item 일부분을 클릭하여

item에 해당하는 db를 업데이트 시켰다.

그러면. ListView에 알려줘서 db가 갱신됬으니 ListView도 갱신시켜줘야되는데 ListView가 안변한다.

AlarmMain.java 와 AlarmCursorAdapter.java는 서로 다른 클래스라 접근이 불가능하다.

 

그래서 사용한 방법이 

AlarmMain.java에

BroadcastReceiver receiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
   // TODO Auto-generated method stub
      if(intent.getAction().equals(ALARM_MAIN_REFRESH)){
    Log.d(TAG, "ALARM_MAIN_REFRESH");
    onResume();
   }
  }
 }; 

를 생성한후

 update_values(alarm.getId(), false);    

 Intent alarm_refresh = new Intent(ALARM_MAIN_REFRESH);
        context.sendBroadcast(alarm_refresh);

 

를 하니 잘동작 하는듯 싶엇다.

그러나 ListView의 스크롤이 생겼을시 문제가 발생하였다.

꼼수를 부려도 안되서

여기에 질문드립니다.

ListView에 갱신된 db정보를 넣어주는 방법좀 알려주시기 바랍니다.