2013-04-01 2 views
3

Я добавляю две кнопки (добавление и удаление) для управления представлением списка, когда я удаляю элемент, элемент не будет сразу исчезать в списке, только когда я нахожу слайд в списке, новый элемент исчезает. GetView() в моем адаптере не будет вызываться после удаления элемента, если я не коснусь экрана или не перейду в список. Может кто-нибудь сказать мне, почему?Android getView: почему getView не называется?

Мой XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/locationlist_layout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" >" 

    <RelativeLayout 
     android:id="@+id/locationlisttitle_layout" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_vertical" 
     android:background="#ADD8E6"> 

     <ImageView 
      android:id="@+id/iv_menu2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:padding="5dp" 
      android:src="@drawable/img_menu" /> 

     <TextView 
      android:id="@+id/txtv_locationmanagetitle" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:text="Manage Location List" 
      android:textSize="20sp" /> 

     <ImageView 
      android:id="@+id/iv_addlocation" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_toRightOf="@+id/txtv_locationmanagetitle" 
      android:src="@drawable/addlocation" /> 

     <ImageView 
      android:id="@+id/iv_deletelocation" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_toRightOf="@+id/iv_addlocation" 
      android:src="@drawable/deletelocation" /> 

    </RelativeLayout> 

    <ListView 
     android:id="@+id/lv_locations" 
     android:layout_height="500dp" 
     android:layout_width="fill_parent" /> 
</LinearLayout> 

Моя кнопка Обработчик события щелчка

ivbtn_deleteLocation.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      //remove selected items from the locationList 
      Collections.sort(listStr); 
      for (int i = listStr.size()-1; i >= 0; i--) { 
       Log.i("zhijianw", "remove"+listStr.get(i)); 
       Log.i("zhijianw", "remove"+locationList.get(Integer.parseInt(listStr.get(i))).get("txtv_locationitem")); 
       String remLocation = locationList.get(Integer.parseInt(listStr.get(i))).get("txtv_locationitem").toString(); 
       locationList.remove(Integer.parseInt(listStr.get(i))); 
       removeLocation(remLocation); 
      } 
      listStr = new ArrayList<String>(); 
      locationsAdapter.notifyDataSetChanged(); 
     } 
}); 

Мой адаптер

public MyAdapter(Context context, List<HashMap<String, Object>> list, int resource, String[] from, int[] to) { 
      this.context = context; 
      this.list = list; 
      keyString = new String[from.length]; 
      idValue = new int[to.length]; 
      System.arraycopy(from, 0, keyString, 0, from.length); 
      System.arraycopy(to, 0, idValue, 0, to.length); 
      inflater = LayoutInflater.from(context); 
      init(); 
      Log.i("zhijianw", "my adapter called"); 
    } 

    public void init() { 
      isSelected = new HashMap<Integer, Boolean>(); 
      for (int i = 0; i < list.size(); i++) { 
        isSelected.put(i, false); 
      } 
    } 

    @Override 
    public int getCount() { 
     Log.i("zhijianw", "get count called"); 
      return list.size(); 
    } 

    @Override 
    public Object getItem(int arg0) { 
     Log.i("zhijianw", "get item called"); 
      return list.get(arg0); 
    } 

    @Override 
    public long getItemId(int arg0) { 
      return arg0; 
    } 

    @Override 
    public View getView(int position, View view, ViewGroup arg2) { 
     init(); 
     Log.i("zhijianw", "get view called");   
     ViewHolder holder = null; 
     if (view == null) { 
       holder = new ViewHolder(); 
       view = inflater.inflate(R.layout.location_item, null); 
       holder.tv = (TextView) view.findViewById(R.id.txtv_locationitem); 
       holder.cb = (CheckBox) view.findViewById(R.id.cb_locationitem); 
       view.setTag(holder); 
     } else { 
       holder = (ViewHolder) view.getTag(); 
     } 
     HashMap<String, Object> map = list.get(position); 
     if (map != null) { 
       itemString = (String) map.get(keyString[0]); 
       holder.tv.setText(itemString); 
     } 
     holder.cb.setChecked(isSelected.get(position)); 
     return view; 
    } 

} 

Установить ListView адаптер

lv_menu = (ListView) menu_view.findViewById(R.id.lv_menu); 
lv_menu.setAdapter(new ArrayAdapter<String>(this, R.layout.menu_item, R.id.txtv_menuItem, menuChoices)); 
+0

@NullPointer Но мне нужно переопределить getView(), чтобы установить TextView и CheckBox в свой список_имен. Я установил точку останова в функции getView, она не будет вызываться до тех пор, пока я не закрою listView. Если я перейду в список, getView будет немедленно вызван, и элемент будет удален. –

+0

Облицовка одной и той же проблемы. Не удалось найти решение. Не могли бы вы помочь мне? – Smeet

ответ

1

locationsAdapter, похоже, не устанавливается в тот же адаптер, который используется lv_menu.setAdapter(), так что locationsAdapter.notifyDataSetChanged() не является аннулирующим lv_menu. Попробуйте lv_menu.invalidate() прямо в вашей функции onClick().

Я лично перезаряжаю свои списки адаптеров с нуля при удалении элементов, особенно когда задействованы CheckBox элементов, чтобы не допустить выхода из синхронизации.

0

Проверьте, что параметр, переданный на накопитель (в методе getView), относится к тому же параметру, который использовался при подключении адаптера. В случае, если они не совпадают, getView не будет вызываться без дальнейшего уведомления. Zohar

Смежные вопросы