2015-08-25 4 views
0

Мне нужно представление списка, которое содержит несколько кликов. Тем не менее, некоторые из них неактивны, пока асинтекст не освободит их. Как мне лучше всего это сделать? Сначала я подумал о том, что у меня есть отдельный ArrayList с булевыми элементами, но это как-то дешево. Есть ли способ расширить StableArrayAdapter?Android ListView с активными и неактивными записями

Это мой текущий адаптер

import android.content.Context; 
import android.widget.ArrayAdapter; 

import java.util.HashMap; 
import java.util.List; 

public class StableArrayAdapter extends ArrayAdapter<String> { 

     HashMap<String, Integer> mIdMap = new HashMap<>(); 

     public StableArrayAdapter(Context context, int textViewResourceId, 
            List<String> objects) { 
      super(context, textViewResourceId, objects); 
      for (int i = 0; i < objects.size(); ++i) { 
       mIdMap.put(objects.get(i), i); 
      } 
     } 

     @Override 
     public long getItemId(int position) { 
      String item = getItem(position); 
      return mIdMap.get(item); 
     } 

     @Override 
     public boolean hasStableIds() { 
      return true; 
     } 
} 
+0

Я только что нашел это здесь: http://stackoverflow.com/questions/6744863/disable-listview-items-with-selector-and-isenabled – rst

ответ

1

Override isEnabled() в адаптере. Вы можете вернуть false для элементов, которые вначале нельзя кликать. Затем, когда ваш AsyncTask завершает работу, в onPostExecute() вы можете вызвать другой способ, который вы определяете на своем адаптере, чтобы включить элементы, из которых в вашей реализации isEnabled() должно быть возвращено значение true для этих элементов.

1

Добавить этот метод к адаптеру

@Override 
public boolean isEnabled (int position) { 
    // Add your logic here. Return true for the items you 
    //want to be enable and false for those you want disable. 
} 

Использование (Из андроида документации): возвращает истину, если элемент в указанной позиции не является разделителем. (Сепаратор является неизбираемым, не вызывающим клика элементом). Результат не указан, если позиция недействительна. В этом случае для быстрого сбоя следует выбросить ArrayIndexOutOfBoundsException.

1

Создайте класс модели для staus каждого элемента в вашем списке, а затем обработайте его в getView. Как ниже ..

public class StatusBean{ 

private boolean isNameActive; 
private boolean isOtherFieldActive; 

public String isnameActive() { 
    return isNameActive; 
} 
public void setNameActive(boolean isNameActive) { 
    this.isNameActive=isNameActive; 
} 
public boolean isOtherFieldActive;() { 
    return isOtherFieldActive; 
} 
public void setOtherFieldActive;(boolean bool) { 
    this.isOtherFieldActive = isOtherFieldActive; 
} 

}

А затем установить эти поля в активное состояние, когда после вашей AsyncTask закончена. И звоните

adapter.notifyDataSetChanged(); 

Все, что вы готовы! дайте мне знать, если у вас возникнут какие-либо проблемы