2017-01-04 9 views
0

Я пытаюсь объявить изменения слушателя для всех флажков, которые загружаются в ListView, где ListView также нагруженный фрагментом, вот мой код:OnCheckedChangedListener для флажков, которые загружены в 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); 
     } 
    } 

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 не на itemclicklistener, любые предложения?

ответ

0

Вам необходимо создать адаптер и назначить его в свой список.

Пример:

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; 

    } 
} 

И в вашем фрагменте:

общественный класс 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; 

} 

}

 Смежные вопросы

  • Нет связанных вопросов^_^