2012-11-19 2 views
0

ListView가있는 Android 앱이 있습니다. 모든 행은 SQLIte 쿼리 결과에 따라 동적으로 생성됩니다. 사용자가 항목을 클릭하면 앱은 해당 항목의 '콘텐츠'로 목록을 새로 고쳐야하고 다른 SQLite 쿼리에 의해 생성되어야합니다. 새로운 의도를 작성하고 동일한 활동으로 보내는 활동을 "새로 고"하려고했습니다. 활동 이름이 이런 식으로 로그 캣에서 ShopActivityListView 새로 고침 방법

 ListView list_content = ((ListView)findViewById(R.id.listforshop)); 
     list_content.setOnItemClickListener(new OnItemClickListener() { 
         @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {    

      // ID and text of selected item 
      long selected_id = id; 
      String selected_name = (String) ((TextView) view.findViewById(R.id.element)).getText(); 

      // New intent 
      Intent intent = getIntent(); 
      intent.setClassName(ShopActivity.this, ShopActivity.class.getName()); 

      // Passing data and refreshing activity 
      intent.putExtra("id", selected_id); 
      intent.putExtra("name", selected_name); 
      intent.putExtra("type", ""); 
      startActivity(intent); 
     }   }); 

인 나에게 번들에 대한 경고를 많이 보여줍니다. 앱이 활동을 시작할 수없는 것 같습니다.

ListView를 "새로 고치는"다른 방법이 있습니까? 이 구현이 정확합니까?

+0

목록 데이터를 업데이트해야하는 경우 어댑터에서 notifyDataSetChanged()를 호출하고 ListView에서 invalidate()를 시도하여 뷰 자체가 다시 그려 지도록 요청하십시오 –

답변

1
// New intent 
Intent intent = getIntent(); 
intent.setClassName(ShopActivity.this, ShopActivity.class.getName()); 

이 새로운 의도가되지 않습니다, 이것은 기존의 것을 재사용 ... 다시 사용이 활동을 재개 할 때 경고 및 예외를 많이 발생합니다이 같은 의도를. 새로운 인 텐트를 만들려면 new 키워드를 사용해야합니다.

하지만 전체 활동을 새로 고침 할 필요가 전혀 없으며 간단히 새 커서를 가져오고 CursorAdapter#swapCursor()을 사용하여 ListView를 새로 고침하십시오.

0

ListView을 새로 고치려면 notifyDataSetChanged() 어댑터를 사용하는 것이 좋습니다. 이 메서드는 제공된 데이터가 변경되었으며 목록보기를 업데이트해야한다는 것을 어댑터에 알려줍니다.

따라서 어댑터에 새 데이터를 추가하고이 메서드를 호출해야합니다.

0

세부 정보를 보는 것처럼 들리지만 동일한 활동을 사용하여 보지 마십시오. 새로운 ShopDetailActivity을 추가하고 사용자가 클릭하면 해당 사용자가 원래 목록으로 돌아가서 (좋은 전환 애니메이션을 얻는) 뒤로 누를 수 있습니다.

+0

예, 마침내이 작업을 수행하기로했습니다. 방법 :) – Andres7X

0

목록 및 세부 정보를 처리하는 또 다른 방법은 단편을 사용하는 것입니다. 이 기능의 장점은 대형 화면 장치에서 목록과 세부 정보를 동시에 볼 수 있다는 것입니다.

하나의 활동을 사용하여 목록과 세부 정보를 모두 표시하는 것은 지저분합니다. 최소한 두 가지 활동을 사용하십시오.

관련 문제