如何通过多个片段内的多个复选框通知所有列表视图?

时间:2017-01-12 09:33:12

标签: android listview android-fragments android-viewpager

我有一个viewpager循环多个片段并在viewpager中设置。每个片段都有一个带复选框的列表视图。单击列表中的任何一项时,它将通知所有片段,以便所有复选框保持未选中状态,并且仅检查单击的项目。

CreateGroupStep1

public class CreateGroupStep1 extends BaseActivity implements IGroup {
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private ImageView next_btn,back;
    private int current_item_position;
    private ViewPagerAdapter adapter;

    private ArrayList<Interest> interestList;
    ArrayList<String>al_sports;
    ArrayList<String>al_list_collect;
    private  ArrayList<String>al_title;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.create_group_step1);
        storeDataOfArrayList();
        al_list_collect=new ArrayList<String>();
        initViews();

    }

    public void initViews() {
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        RelativeLayout back=(RelativeLayout) findViewById(R.id.back);
        back=(RelativeLayout) findViewById(R.id.back);
        back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        next_btn=(ImageView) findViewById(R.id.next_btn);

        next_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               // Intent ii=new Intent(CreateGroupStep1.this,CreateGroupStep2.class);
                //startActivity(ii);
                Toast.makeText(CreateGroupStep1.this, "", Toast.LENGTH_SHORT).show();
            }
        });
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setTitle("");
        setSupportActionBar(toolbar);
        if (getSupportActionBar() != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            finish();
        }
        return super.onOptionsItemSelected(item);
    }

    private void setupViewPager(ViewPager viewPager) {
        adapter = new ViewPagerAdapter(CreateGroupStep1.this.getSupportFragmentManager());
        for (int i=0;i<al_title.size();i++)
        {
            adapter.addFragment(InterestFragmentForGroup.getInstance(al_sports),al_title.get(i));
            viewPager.setAdapter(adapter);
        }
        viewPager.setAdapter(adapter);
        viewPager.setOffscreenPageLimit(10);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            public void onPageScrollStateChanged(int state) {
            }

            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            public void onPageSelected(int position) {

                current_item_position = position;
               // Toast.makeText(CreateGroupStep1.this, "scrolled", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public void onClickedNextButton(final String message) {

        next_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(CreateGroupStep1.this,message, Toast.LENGTH_SHORT).show();
            }
        });

    }

    public static class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }

    }
    public  void  storeDataOfArrayList()
    {

        saveData();
        al_sports=new ArrayList<>();
        al_sports.add("Baseball");
        al_sports.add("Basketball");
        al_sports.add("Bowling");
        al_sports.add("Cricket");
        al_sports.add("Football");
        al_sports.add("Golf");
        al_sports.add("Handball");
        al_sports.add("Hockey");
        al_sports.add("Jogging");
        al_sports.add("Racquetball");
        al_sports.add("Running");
        al_sports.add("Skiing");
        al_sports.add("Snowboarding");
        al_sports.add("Soccer");
        al_sports.add("Swimming");
        al_sports.add("Tennis");
    }
    private  void  saveData()
    {
        al_title=new ArrayList<String>();
        al_title.add("Sports");

        al_title.add("LifeStyle");

        al_title.add("Adventure");

        al_title.add("Recreation");

        al_title.add("The Arts");

        al_title.add("College");

        al_title.add("Sos");

        al_title.add("Industry");

        al_title.add("LocalBiz");

        al_title.add("Corporate");
    }
}

InterestAdapterForGroup

public class InterestAdapterForGroup extends RecyclerView.Adapter<InterestAdapterForGroup.MyViewHolder> implements IGroup {

    public int selectedPosition = -1;
    IGroup inter;
    private LayoutInflater inflater;
    private ArrayList<Interest> stList;
    private Context mContext;
    private ArrayList<Interest> checked_item = new ArrayList<>();

    public InterestAdapterForGroup(Context context, ArrayList<Interest> al_list) {
        this.mContext = context;
        this.stList = al_list;
        inflater = LayoutInflater.from(context);
        inter = (IGroup) mContext;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.custom_ethnic, parent, false);
        InterestAdapterForGroup.MyViewHolder holder = new InterestAdapterForGroup.MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        final int pos = position;

        final Interest interest = stList.get(position);
        holder.title.setText(interest.getName());

        if (position == selectedPosition) {
            holder.chkSelected.setChecked(true);
        } else {
            holder.chkSelected.setChecked(false);
        }


        holder.chkSelected.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if (buttonView.isPressed()) {
                    interest.isSelected = isChecked;

                    if (isChecked) {
                        checked_item.clear();
                        checked_item.add(interest);
                        selectedPosition = position;
                    } else {
                        checked_item.remove(interest);
                        selectedPosition = -1;
                    }
                    notifyDataSetChanged();
                }
            }
        });

        clickedItems();

    }

    public void clickedItems() {

        if (checked_item.size() > 0) {

            if (Constants.GLOBAL_ARRAY.size() > 0) {
                Constants.GLOBAL_ARRAY.clear();
                for (int i = 0; i < checked_item.size(); i++) {
                    Constants.GLOBAL_ARRAY.add(checked_item.get(i).getName());
                }

            }
        }

        ArrayList<String> al_name = new ArrayList<String>();
        ArrayList<String> al_nam = new ArrayList<String>();
        for (int i = 0; i < checked_item.size(); i++) {
            al_name.add(checked_item.get(i).getEmailId());
        }
        for (int i = 0; i < checked_item.size(); i++) {
            al_nam.add(checked_item.get(i).getName());
            Constants.GLOBAL_ARRAY.add(checked_item.get(i).getName());
        }

        inter.onClickedNextButton(al_nam.toString());
    }

    public ArrayList<Interest> getCheckedItemList() {
        return stList;
    }

    @Override
    public int getItemCount() {
        return stList.size();
    }

    @Override
    public void onClickedNextButton(String message) {

    }

    class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public CheckBox chkSelected;
        TextView title;

        public MyViewHolder(View itemView) {
            super(itemView);
            title = (TextView) itemView.findViewById(R.id.txt_ethnic);
            chkSelected = (CheckBox) itemView
                    .findViewById(R.id.chk);
        }

        @Override
        public void onClick(View v) {

        }

    }
}

InterestFragmentForGroup

public class InterestFragmentForGroup extends BasePagerFragment implements IPager {

    private ArrayList<String> interestList;
    private ArrayList<Interest> interestListfunction;

    public static Fragment getInstance(ArrayList<String> interestList){
        Bundle bundle = new Bundle();
        bundle.putSerializable("interestList",interestList);
        InterestFragmentForGroup interestsFragment = new InterestFragmentForGroup();
        interestsFragment.setArguments(bundle);
        return interestsFragment;
    }

    public void getInterestList(){
        interestList = (ArrayList<String>) getArguments().getSerializable("interestList");
    }
    private RecyclerView recyclerView;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.sports_fragment, container, false);
        initViews(rootView);
        return rootView;
    }

    public void initViews(View view) {
        recyclerView = (RecyclerView) view.findViewById(R.id.drawerList);
        getInterestList();
        setData();
    }

    public void setData() {

        interestListfunction = new ArrayList<>();
        for (int i = 0; i < interestList.size(); i++) {
            Interest st = new Interest(interestList.get(i), interestList.get(i), false);
            interestListfunction.add(st);
        }

        adapter2 = new InterestAdapterForGroup(getActivity(), interestListfunction);
        recyclerView.addItemDecoration(new DividerDecoration(getActivity(), LinearLayoutManager.VERTICAL));
        recyclerView.setAdapter(adapter2);
        recyclerView.setLayoutManager(new LinearLayoutManager(recyclerView.getContext()));

    }

}

0 个答案:

没有答案