Java 具有活动和非活动项的Android ListView
我需要一个列表视图,它有几个可点击的条目。但是,在异步任务释放它们之前,它们中的一些是非活动的。我应该如何最好地做到这一点?首先,我想有一个与布尔人分开的ArrayList,但这似乎有点便宜。有没有办法扩展StableArlayAdapter 这是我当前的适配器Java 具有活动和非活动项的Android ListView,java,android,android-listview,Java,Android,Android Listview,我需要一个列表视图,它有几个可点击的条目。但是,在异步任务释放它们之前,它们中的一些是非活动的。我应该如何最好地做到这一点?首先,我想有一个与布尔人分开的ArrayList,但这似乎有点便宜。有没有办法扩展StableArlayAdapter 这是我当前的适配器 import android.content.Context; import android.widget.ArrayAdapter; import java.util.HashMap; import java.util.List;
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;
}
}
导入android.content.Context;
导入android.widget.ArrayAdapter;
导入java.util.HashMap;
导入java.util.List;
公共类StableArrayAdapter扩展了ArrayAdapter{
HashMap mIdMap=新的HashMap();
公共StableArrayAdapter(上下文上下文,int textViewResourceId,
列出对象){
超级(上下文、textViewResourceId、对象);
对于(int i=0;i
在适配器中重写。对于最初不应单击的项目,可以返回false。然后,当AsyncTask完成时,在onPostExecute()
中,您可以调用适配器上定义的其他方法来启用这些项,从这一点开始,isEnabled()
实现中的这些项应返回true。在适配器中重写。对于最初不应单击的项目,可以返回false。然后,当AsyncTask完成时,在onPostExecute()
中,您可以调用适配器上定义的其他方法来启用这些项,从这一点开始,isEnabled()
实现中的这些项应返回true。将此方法添加到适配器中
@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.
}
用法(来自android文档):如果指定位置的项不是分隔符,则返回true。(分隔符是不可选择、不可单击的项目)。如果位置无效,则结果未指定。在这种情况下,应抛出ArrayIndexOutOfBoundsException以防快速失败。将此方法添加到适配器
@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.
}
用法(来自android文档):如果指定位置的项不是分隔符,则返回true。(分隔符是不可选择、不可单击的项目)。如果位置无效,则结果未指定。在这种情况下,应该抛出ArrayIndexOutOfBoundsException以防快速失败。我也有类似的要求。您可以使用SparSeBooleanArray来表示每个列表项的状态,无论它是否必须处于活动/非活动状态。 结帐
希望这有帮助。我也有类似的要求。您可以使用SparSeBooleanArray来表示每个列表项的状态,无论它是否必须处于活动/非活动状态。 结帐
希望这有帮助。为列表中每个项目的状态创建一个模型类,然后在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;
}
}
然后在异步任务完成时将这些字段设置为活动状态。打电话
adapter.notifyDataSetChanged();
完成了!如果遇到任何问题,请告诉我为列表中每个项目的状态创建一个模型类,然后在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;
}
}
然后在异步任务完成时将这些字段设置为活动状态。打电话
adapter.notifyDataSetChanged();
完成了!如果您在这方面遇到任何问题,请告诉我我在这里发现了这个:我在这里发现了这个: