Java 具有活动和非活动项的Android ListView

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;

我需要一个列表视图,它有几个可点击的条目。但是,在异步任务释放它们之前,它们中的一些是非活动的。我应该如何最好地做到这一点?首先,我想有一个与布尔人分开的ArrayList,但这似乎有点便宜。有没有办法扩展StableArlayAdapter

这是我当前的适配器

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();
完成了!如果您在这方面遇到任何问题,请告诉我

我在这里发现了这个:我在这里发现了这个: