2014-04-16 3 views
1

목록 항목을 클릭 한 후 작은 문제가 하나 있는데 항목에 체크 표시가 없으면 상태가 변경되지 않습니다. 업데이트가 완벽하게 작동하지만 setChecked 일 수도 있지만 활동을 종료하고 다시 실행 한 후에 변경 사항이 표시됩니다. notifyDataSetChange()에 대해 많이 읽었지만 제대로 작동하지 않을 수 있습니다. 항목 Chechbox 값을 클릭 한 후 변경하면 어떻게됩니까?안드로이드, 목록 항목을 클릭 한 후 목록보기를 새로 고침

public class SviatokPridajActivity extends Activity 
{ 
private DatabaseOp mDbHelper; 
ListView listview; 
String username; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sviatok_pridaj); 

    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

    listview = (ListView) findViewById(R.id.listSviatok); 

    showUserSettings(); 

    mDbHelper = new DatabaseOp(this); 
    mDbHelper.open(); 

    Cursor sviatokCursor = mDbHelper.fetchAllSviatokNastav(username, 3); 

    if (sviatokCursor.getCount()==0) 
    { 
     mDbHelper.naplnSviatky(username); 
     sviatokCursor = mDbHelper.fetchAllSviatokNastav(username, 3); 
    } 

    final SviatokCursorAdapter adapter = new SviatokCursorAdapter(this, sviatokCursor); 
    listview.setAdapter(adapter); 

    listview.setOnItemClickListener(new OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int stlpec, long arg3) 
     { 
      // TODO Auto-generated method stub 
      Cursor cur = (Cursor) adapter.getItem(stlpec); 
      String odosli = cur.getString(cur.getColumnIndex("_id")); 
      String zobraz = cur.getString(cur.getColumnIndex("dlzka")); 

      CheckBox check = (CheckBox)findViewById(R.id.checkBox); 

      if (Integer.parseInt(zobraz)==0) 
      { 
       mDbHelper.updateSviatok(odosli, username, 1); 
      } else { 
       mDbHelper.updateSviatok(odosli, username, 0); 
      } 

      check.setChecked(!check.isChecked()); 

      adapter.notifyDataSetChanged(); 
     } 
    }); 
} 

@Override 
public void onPause() 
{ 
    super.onPause(); 
    mDbHelper.close(); 
} 

private void showUserSettings() 
{ 
    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); 
    username = sharedPrefs.getString("prefUsername", "NULL"); 
} 
} 
+0

어댑터를 업데이트하셨습니까? –

답변

0

당신은 대해서 itemClick에 CheckBox을 확인했지만 그것은 당신이 새로운 변화에 많은 ListItems를 새로해야 adapter.notifyDataSetChanged();를 호출하기 전에 귀하의 itemList에 반영 아니에요.

+0

괜찮지 만 목록을 새로 고칠 수있는 방법 – Tomino

0

이 질문에 답변했습니다 : https://stackoverflow.com/a/22954806/1332870 확인할 수 있습니까? 이 문제가 해결되지 않을 경우 나 당신 Cursor를 새로 고침하고 대신 adapter.notifyDataSetChanged(); 사용

+0

adapter.clear() – Tomino

+0

새 항목을 추가하고 어댑터를 설정 한 다음 notifyDataSetChanged –

0

알려 주시기 바랍니다 adapter.changeCursor(reloadedCursor);이 메인 스레드에 부담이 있지만, 당신은 단지에 다시 어댑터를 설정할 수 있다면

+0

무엇을 reloadedCursor로 변경해야합니까? – Tomino

+0

'커서 reloadedCursor = mDbHelper.fetchAllSviatokNastav (사용자 이름, 3)' 는 'adapter.changeCursor (reloadedCursor)' – isah

+0

괜찮습니다, 감사합니다 – Tomino

0

확실하지 않음 클릭 방법.