Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在ListView上选择了多个项目,但选择了错误的项目_Android_Listview_Android Fragments_Android Listview - Fatal编程技术网

Android 在ListView上选择了多个项目,但选择了错误的项目

Android 在ListView上选择了多个项目,但选择了错误的项目,android,listview,android-fragments,android-listview,Android,Listview,Android Fragments,Android Listview,我有一个片段列表视图的代码。我的目标是在列表中选择多个项目并突出显示它们。我的代码确实突出显示了该项目,但当我滚动列表时,会突出显示更多的项目,当我再次向上滚动时,会再次突出显示更多的项目,每当我滚动列表时,它会一次又一次地突出显示并更改为默认状态。我不知道为什么会这样。 注意:我试过CHOICE\u MODE\u SINGLE、CHOICE\u MODE\u MULTIPLE、CHOICE\u MODE\u MULTIPLE\u MODE,我也试过MultiChoiceModeListener

我有一个片段列表视图的代码。我的目标是在列表中选择多个项目并突出显示它们。我的代码确实突出显示了该项目,但当我滚动列表时,会突出显示更多的项目,当我再次向上滚动时,会再次突出显示更多的项目,每当我滚动列表时,它会一次又一次地突出显示并更改为默认状态。我不知道为什么会这样。 注意:我试过CHOICE\u MODE\u SINGLE、CHOICE\u MODE\u MULTIPLE、CHOICE\u MODE\u MULTIPLE\u MODE,我也试过MultiChoiceModeListener,但我的应用程序应该在9以上的API上运行。所以这不是我的解决方案

我的片段不想使用ListFragment

这是我片段的XML,请注意,我正在为列表中的项目使用数组

我的XML片段

我没有使用和适配器,因为我从默认数组设置了列表项


对不起我的英语,我希望你能帮助我。我无法上传图像,因为我还没有足够的声誉。

您可以使用以下适配器来实现您的目标

在Listview中删除android:entries=@array/list\u inventario,并在XML中添加choicemode,如下所示

<ListView 
    android:id="@+id/list_inv"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:choiceMode="multipleChoice">
</ListView>
发明碎片

public class InventarioFragment extends Fragment {

private Activity activity;
private ListView listInventario;
private String[] inventatioItems;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    this.activity=activity;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    final View view  = inflater.inflate(R.layout.fragment_inventario_list,container,false);
    listInventario = (ListView) view.findViewById(R.id.list_inv);
    inventatioItems=getResources().getStringArray(R.array.list_inventario);

    InverntarioAdapter adapter=new InverntarioAdapter(activity);
    listInventario.setAdapter(adapter);
    listInventario.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View v, int pos, long arg3) {
            listInventario.setItemChecked(pos, true);;  
        }
    });

    return view;
}


private class InverntarioAdapter extends BaseAdapter{

    private LayoutInflater inflator;

    public InverntarioAdapter(Context context){
        inflator=(LayoutInflater) context.getSystemService(activity.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return inventatioItems.length;
    }

    @Override
    public Object getItem(int position) {
        return inventatioItems[position];
    }

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

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        TextView tv;
        if(convertView == null){
            convertView=inflator.inflate(android.R.layout.simple_list_item_1, null);
            convertView.setBackground(getResources().getDrawable(R.drawable.selector_background));
        }
        tv=(TextView) convertView.findViewById(android.R.id.text1);             
        tv.setText(inventatioItems[position]);

        if(listInventario.isItemChecked(position)){
            //background Color of selected items
            convertView.setBackgroundColor(Color.BLUE);
        }
        else{
            convertView.setBackgroundColor(Color.WHITE);
        }

        return convertView;
    }
}
}

非常感谢。抱歉耽搁了!它工作得很好。
<ListView 
    android:id="@+id/list_inv"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:choiceMode="multipleChoice">
</ListView>
public class InventarioFragment extends Fragment {

private Activity activity;
private ListView listInventario;
private String[] inventatioItems;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    this.activity=activity;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    final View view  = inflater.inflate(R.layout.fragment_inventario_list,container,false);
    listInventario = (ListView) view.findViewById(R.id.list_inv);
    inventatioItems=getResources().getStringArray(R.array.list_inventario);

    InverntarioAdapter adapter=new InverntarioAdapter(activity);
    listInventario.setAdapter(adapter);
    listInventario.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View v, int pos, long arg3) {
            listInventario.setItemChecked(pos, true);;  
        }
    });

    return view;
}


private class InverntarioAdapter extends BaseAdapter{

    private LayoutInflater inflator;

    public InverntarioAdapter(Context context){
        inflator=(LayoutInflater) context.getSystemService(activity.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return inventatioItems.length;
    }

    @Override
    public Object getItem(int position) {
        return inventatioItems[position];
    }

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

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        TextView tv;
        if(convertView == null){
            convertView=inflator.inflate(android.R.layout.simple_list_item_1, null);
            convertView.setBackground(getResources().getDrawable(R.drawable.selector_background));
        }
        tv=(TextView) convertView.findViewById(android.R.id.text1);             
        tv.setText(inventatioItems[position]);

        if(listInventario.isItemChecked(position)){
            //background Color of selected items
            convertView.setBackgroundColor(Color.BLUE);
        }
        else{
            convertView.setBackgroundColor(Color.WHITE);
        }

        return convertView;
    }
}
}