2013-08-20 2 views
0

데이터베이스 테이블의 내용을 표시하는 사용자 지정 목록보기가 있습니다. 사용하면 데이터베이스에 새 항목을 추가 할 수 있으며 새로 추가 된 항목뿐만 아니라 테이블의 다른 항목도 표시하도록 Listview가 다시로드됩니다.목록보기를 다시로드하면 이전 및 새 내용이 표시됩니다.

그러나 목록보기가 업데이트 될 때 아래 코드를 사용하면 추가 내용과 추가 내용에 대한 표의 콘텐츠가 모두 표시됩니다. 예를 들면 다음과 같은

목록보기 보일 것이다

Item 1 
Item 2 
Item 3 

그런 다음 사용자가 새 항목을 추가하고이

Item 1 
Item 2 
Item 3 
Item 4 

과 같아야하지만 그 대신이 표시

Item 1 
Item 2 
Item 3 
Item 1 
Item 2 
Item 3 
Item 4 

이 코드를 사용하여 목록보기를 업데이트합니다.

,
m_adapter.clear(); 
for (int i = 0; i < db.getAllLists().size(); i++) { 
     m_adapter.add(db.getAllLists().get(i)); 
} 
m_adapter.notifyDataSetChanged(); 

Mylistadapter

class MyListAdapter extends ArrayAdapter<mList> { 

     private ArrayList<mList> items; 

     public MyListAdapter(Context context, int textViewResourceId, ArrayList<mList> items) { 
       super(context, textViewResourceId, items); 
       this.items = items; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
       View v = convertView; 
       if (v == null) { 
        LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        v = vi.inflate(R.layout.list_row_layout, null); 
       } 
       mList o = items.get(position); 
       if (o != null) { 
         TextView tt = (TextView) v.findViewById(R.id.ptitle); 
         Typeface font = Typeface.createFromAsset(getAssets(), "Asap-Regular.ttf"); 
         tt.setTypeface(font); 

         if (tt != null) { 
           tt.setText(o.getName() + " (" + db.getItemsCount(o.getID()) + ")");        
          } 
       } 
       return v; 
     } 
    } 

그리고

다음 아래의 코드 내에서 OnCreate에 : 당신

편집 감사합니다,

ArrayList<mList> m_orders = db.getAllLists(); 

    MyListAdapter m_adapter = new MyListAdapter(this, R.layout.list_row_layout, m_orders); 
    ListView list1.setAdapter(m_adapter); 

당신이 다른 코드를 볼 필요가 있다면 알려주세요 시도해 본 것

m_orders.clear(); 
m_orders = db.getAllLists(); 
m_adapter.addAll(m_orders); 
m_adapter.notifyDataSetChanged(); 
여전히 이전 및 새 목록을 모두 보여줍니다 그러나

+2

이전 목록이 지워지지 않고 이전 목록과 새 목록을 추가합니다. 아마도 m_adapter.clear()가 제대로 작동하지 않을 수 있습니다. 더 많은 코드를 게시 하시겠습니까? –

+0

@ Yume117 추가 비용 게시 됨 –

+0

ArrayList (어댑터 대신)를 지우고 ArrayList에 새 항목을 추가 한 다음 notifyDatasetChanged()를 호출하는 것은 어떻습니까? 내 말은, 그게 내가하는 일이고 결코 실패하지 않는다는거야. – Swayam

답변

0

// 먼저 명확한 컬렉션 (귀하의 경우 ArrayList를)

your_collection.clear(); 

// 같은 새로운 데이터를 추가

ArrayList<mList> m_orders = db.getAllLists(); 

// 목록보기를 새로 고침

m_adapter.notifyDataSetChanged(); 
+0

내 편집은이 문제를 해결했습니다. –

관련 문제