Android OnCheckedChangedListener,查看在片段内部的listview中加载的复选框

Android OnCheckedChangedListener,查看在片段内部的listview中加载的复选框,android,listview,android-fragments,oncheckedchanged,Android,Listview,Android Fragments,Oncheckedchanged,我试图为listview中加载的所有复选框声明一个更改侦听器,其中listview也由一个片段加载,下面是我的代码: 片段: public class AddGroupMembersFragment extends Fragment{ ArrayList<HashMap<Integer, Member>> groupMembersList; ListView lv; CheckBox checkBox; @Override pu

我试图为listview中加载的所有复选框声明一个更改侦听器,其中listview也由一个片段加载,下面是我的代码:

片段:

public class AddGroupMembersFragment extends Fragment{

    ArrayList<HashMap<Integer, Member>> groupMembersList;
    ListView lv;
    CheckBox checkBox;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_add_group_members, container, false);
        groupMembersList = new ArrayList<>();
        lv = (ListView) rootView.findViewById(R.id.group_members_list);
        new AddGroupMembersFragment.PostDataAsyncTask().execute();
        // Inflate the layout for this fragment
        return rootView;
    }

    AdapterView.OnItemClickListener checkBoxChanged = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
            // AdapterView is the parent class of ListView
            ListView lv = (ListView) arg0;
            if(lv.isItemChecked(position)){
                if(selectAllSubmit.getVisibility()==View.INVISIBLE){
                    selectAllSubmit.setVisibility(View.VISIBLE);
                }
            }
        }
    };

    public class PostDataAsyncTask extends AsyncTask<String, String, String> {

        ...

        @Override
        protected void onPostExecute(String lenghtOfFile) {
            lv.setAdapter(new GroupMembersListAdapter(getActivity(),groupMembersList,1));
            lv.setOnItemClickListener(checkBoxChanged);
        }
    }
public类AddGroupMembersFragment扩展片段{
ArrayList组成员列表;
ListView lv;
复选框;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气器。充气(R.layout.fragment\u添加组成员,容器,false);
groupMembersList=新的ArrayList();
lv=(ListView)rootView.findViewById(R.id.group\u members\u list);
新建AddGroupMembersFragment.PostDataAsyncTask().execute();
//为该碎片膨胀布局
返回rootView;
}
AdapterView.OnItemClickListener checkBoxChanged=new AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView arg0、视图arg1、整型位置、长id){
//AdapterView是ListView的父类
ListView lv=(ListView)arg0;
如果(低压isItemChecked(位置)){
如果(选择AllSubmit.getVisibility()==View.INVISIBLE){
选择AllSubmit.setVisibility(View.VISIBLE);
}
}
}
};
公共类PostDataAsyncTask扩展了AsyncTask{
...
@凌驾
受保护的void onPostExecute(字符串长度ffile){
setAdapter(新的GroupMembersListAdapter(getActivity(),groupMembersList,1));
lv.setOnItemClickListener(复选框已更改);
}
}
listview item.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <CheckBox
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:buttonTint="@color/colorPrimary" />
        ...

...

我想使用oncheckchangedlistener而不是on itemclicklistener,有什么建议吗?

您需要创建一个适配器并将其分配给列表

例如:

class MyAdapter extends BaseAdapter { //or ArrayAdapter, or what you prefer
    private final CompoundButton.OnCheckedChangeListener listener;
    MyAdapter(CompoundButton.OnCheckedChangeListener listener) {
        this.listener = listener;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View view = convertView;
        if (view == null) {
            view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_item);
        }
        CheckBox checkBox = view.findViewById(R.id.check_box_id);
        checkBox.setOnCheckedChangeListener(listener);
        return view;

    }
}
在你的片段中:

public class AddGroupMembersFragment extends Fragment{

    ArrayList<HashMap<Integer, Member>> groupMembersList;
    ListView lv;
    CheckBox checkBox;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_add_group_members, container, false);
        groupMembersList = new ArrayList<>();
        lv = (ListView) rootView.findViewById(R.id.group_members_list);
        new AddGroupMembersFragment.PostDataAsyncTask().execute();
        // Inflate the layout for this fragment
        return rootView;
    }

    AdapterView.OnItemClickListener checkBoxChanged = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
            // AdapterView is the parent class of ListView
            ListView lv = (ListView) arg0;
            if(lv.isItemChecked(position)){
                if(selectAllSubmit.getVisibility()==View.INVISIBLE){
                    selectAllSubmit.setVisibility(View.VISIBLE);
                }
            }
        }
    };

    public class PostDataAsyncTask extends AsyncTask<String, String, String> {

        ...

        @Override
        protected void onPostExecute(String lenghtOfFile) {
            lv.setAdapter(new GroupMembersListAdapter(getActivity(),groupMembersList,1));
            lv.setOnItemClickListener(checkBoxChanged);
        }
    }
公共类StackFragment扩展片段实现CompoundButton.OnCheckedChangeListener{

ListView listView;
MyAdapter adapter;

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    // do stuff here
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_add_group_members, container, false);
    listView = (ListView) rootView.findViewById(R.id.group_members_list);
    adapter = new MyAdapter(this);
    listView.setAdapter(adapter);
    return rootView;

}
}