2011-12-29 5 views
8

이 질문은 - Android - Listview delete item and Refresh과 유사합니다.목록보기 삭제 항목 및 새로 고침 - android

나는 내 어댑터를 새로 고침하지 못할 :

adapter.notifyDataSetChanged(); 

내가 시도 :

adapter.remove(adapter.getItem(pos)); 

하지만 성공하지 않고, 한 시간 (이상한를 ...).

다른 답이있다 :

Call that Activity once again Using Intent 

sombody 날이에 대한 정확한 코드를 제공 (또는 어댑터/커서) 할 수 있습니까?

나는 이것을 두 시간 동안 계속 시도하고있다.

내 전체 코드 :

protected void onCreate (Bundle SavedInstanceState) { 


    super.onCreate(SavedInstanceState); 
    setContentView(R.layout.personalmessageview); 

    headtitle= getIntent().getExtras().getString("head"); 

    setTitle(headtitle); 


    personalresults = getIntent().getExtras().getStringArrayList("personalres"); 
    personalresultswithtime = getIntent().getExtras().getStringArrayList("personalrestime"); 



    // setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,personalresults)); 

    ListView list = (ListView)findViewById(R.id.listview_personal);  
    // ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, personalresults); 
    list.setAdapter(adapter); 
    registerForContextMenu(list); 


    list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id) { 


       String time = personalresultswithtime.get(pos).toString(); 


        Show_Alert_box(v.getContext(),"Please select action.",time,pos); 


       return true; 
      } 
     }); 

공공 무효 Show_Alert_box (컨텍스트 컨텍스트, 문자열 메시지, 문자열 시간, INT 위치) 최종 문자열 타임 스탬프 = 시간;

   final int pos = position; 

      final AlertDialog alertDialog = new AlertDialog.Builder(context).create(); 
       alertDialog.setTitle(getString(R.string.app_name)); 
       alertDialog.setButton("Delete", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 

         try 
         { 
          db = databaseHelper.getWritableDatabase(); 


          db.delete("messages","timestamp" + "=?", new String[] { timestamp }); 

          Log.d("DB"," delete! "); 

          ArrayAdapter<String> adapter = new ArrayAdapter<String>(PersonalMessageView.this, android.R.layout.simple_list_item_1, personalresults); 


            adapter.remove(adapter.getItem(pos)); //not working t all! why ? 

          list.notify(); 
          list.invalidate(); 


          personalresults.remove(pos); 
          personalresultswithtime.remove(pos); 

          adapter.notifyDataSetChanged(); 

          db.close(); 




         } 
         catch(Exception e) 
         { 

         } 
       } }); 
       alertDialog.setButton2("Cancel", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         alertDialog.dismiss(); 
       } }); 

       alertDialog.setMessage(message); 
       alertDialog.show(); 

}

+0

제거 항목을 시도하고 다음 어댑터에 사용하는 어떤 –

+0

을 chaged 날짜 설정을 통지? 즉 ArrayAdapter 또는 BaseAdapter 또는 그 중 하나에서 파생 된 클래스? –

+0

iv'e 코드를 추가했습니다. 다시 확인해주세요. – Smoker09

답변

3

데이터 변경 후 목록보기를 무효화 데이터가 변경 될 때 ListActivity는 목록보기 그냥 전화로 어댑터를 결합하는

getListView().invalidate(); 
+0

작동하지 않습니다 ... 제 코드를 확인해 주시겠습니까? – Smoker09

2

메이크업 기능을 다음 줄을 사용하여 내부 다시 그 기능을 삭제가 완료되면 Listview가 다시 채워지며 목록이 새로 고쳐집니다.
데이터베이스를 사용하고 있습니까?

+0

네, DB를 사용하고 있습니다. 추가 된 코드를 확인하십시오. 탱크! – Smoker09

2

listview.invalidateViews();를 사용하여 시도 adapter.remove(adapter.getItem(pos));

+0

여전히 작동하지 않습니다. 탱크. – Smoker09

6

후 다음 다음 (A 다시 쿼리 또는이되지 이후 같은과) 당신의 ArrayList를 업데이트하여 DB의 변경 사항을 업데이트해야

adapter.remove(adapter.getItem(pos)); 
notifyDataSetChanged(); 
+0

작동하지 않습니다 :) 내 코드를 확인해 주시겠습니까? >>> – Smoker09

+0

내 어댑터에는 제거 기능이 없습니다. –

0
public class Listview_cls extends Activity implements OnItemClickListener{ 
      ListView lv; 
      String items[]= {"Kolkata","Delhi","Mumbai","Pune"}; 
      ArrayAdapter adp; 
      public void onCreate(Bundle savedInstanceState) 
      { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      arr = new ArrayList(); 
      lv = (ListView) findViewById (R.id.ListView01); 
      for(int i=0; i<items.length; i++) 
      { 
       arr.add(items[i]); 
      } 
     adp = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arr); 
     lv.setAdapter(adp); 
     lv.setOnItemClickListener(this); 
    } 


    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) 
    {  

    adp.remove(adp.getItem(arg2)); 
     adp.notifyDataSetChanged(); 

    } 
} 
2

시도 당신은 adapter.notifyDataSetChanged()를 호출해야합니다;

6

당신은 아마 그것을 해결되었다하지만 다른 단지의 경우 사람이 여기에, 같은 문제를 가지고 내 솔루션입니다 :

ArrayAdapter<String> myAdapter = (ArrayAdapter<String>)getListView().getAdapter(); 
myAdapter.remove(myAdapter.getItem(info.position)); 
myAdapter.notifyDataSetChanged(); 

문제는 당신이 당신의 목록의 어댑터를 가지고 있지 않은 것이 었습니다.

+0

나를 위해 일했습니다. 감사. – Si8

0
@Override 
    public boolean onContextItemSelected(MenuItem item) { 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();  
     int position = info.position; 
     favouriteReportList d; 
     d= array_list.get(position); 
     switch (item.getItemId()) { 
      case R.id.connect:    
       return true; 
      case R.id.mark: 
       return true; 
      case R.id.delete:   
       myFavReport = new DBhandlerReport(this); 
       myFavReport.deleteMyFavReport(d.getReportName(), d.getPathName(), myUrl); 
       myFavReport.close(); 
// arrarAdapter is an object of your class. 
       arrayAdapter.remove(arrayAdapter.getItem(info.position)); 
       arrayAdapter.notifyDataSetChanged(); 
       return true;     
      default: 
       return super.onContextItemSelected(item); 
     } 
    } 
-1

어댑터에서이

Intent intent= getIntent(); 
      finish(); 
      startActivity(intent); 
관련 문제