每次用户点击multispinner时,如何刷新适配器并取消选择所有项目?

时间:2016-10-15 08:10:35

标签: android-spinner baseadapter

每次用户点击multispinner时,我想刷新baseadapter的getview()。还要取消选中所有选中的复选框。  有人请帮忙。

  

块引用

下面是我的multispinner java类

public class MultiSpinnerSearch extends Spinner implements OnCancelListener {
private static final String TAG = MultiSpinnerSearch.class.getSimpleName();
private List<KeyPairBoolData> items;
private String defaultText = "";
private String spinnerTitle = "";
private SpinnerListener listener;
private int limit = 0;
private int selected = 0;
private LimitExceedListener limitListener;
MyAdapter adapter;
public static AlertDialog.Builder builder;
public static AlertDialog ad;

public MultiSpinnerSearch(Context context) {
    super(context);
}

public MultiSpinnerSearch(Context arg0, AttributeSet arg1) {
    super(arg0, arg1);
    TypedArray a = arg0.obtainStyledAttributes(arg1, R.styleable.MultiSpinnerSearch);
    limit = a.getIndexCount();
    for (int i = 0; i < limit; ++i) {
        int attr = a.getIndex(i);
        if (attr == R.styleable.MultiSpinnerSearch_hintText) {
            spinnerTitle = a.getString(attr);
            defaultText = spinnerTitle;
            break;
        }
    }
    Log.i(TAG, "spinnerTitle: " + spinnerTitle);
    a.recycle();
}

public MultiSpinnerSearch(Context arg0, AttributeSet arg1, int arg2) {
    super(arg0, arg1, arg2);
}

public void setLimit(int limit, LimitExceedListener listener) {
    this.limit = limit;
    this.limitListener = listener;
}

public List<KeyPairBoolData> getSelectedItems() {
    List<KeyPairBoolData> selectedItems = new ArrayList<>();
    for (KeyPairBoolData item : items) {
        if (item.isSelected()) {
            selectedItems.add(item);
        }
    }
    return selectedItems;
}

public List<Long> getSelectedIds() {
    List<Long> selectedItemsIds = new ArrayList<>();
    for (KeyPairBoolData item : items) {
        if (item.isSelected()) {
            selectedItemsIds.add(item.getId());
        }
    }
    return selectedItemsIds;
}

@Override
public void onCancel(DialogInterface dialog) {
    // refresh text on spinner

    StringBuilder spinnerBuffer = new StringBuilder();

    for (int i = 0; i < items.size(); i++) {
        if (items.get(i).isSelected()) {
            spinnerBuffer.append(items.get(i).getName());
            spinnerBuffer.append(", ");
        }
    }

    String spinnerText = spinnerBuffer.toString();
    if (spinnerText.length() > 2)
        spinnerText = defaultText;
    else
        spinnerText = defaultText;

    ArrayAdapter<String> adapterSpinner = new ArrayAdapter<>(getContext(), R.layout.textview_for_spinner, new String[]{spinnerText});
    setAdapter(adapterSpinner);

    if (adapter != null)
        adapter.notifyDataSetChanged();

    listener.onItemsSelected(items);
}

@Override
public boolean performClick() {

    builder = new AlertDialog.Builder(new ContextThemeWrapper(getContext(), R.style.Material_App_Dialog));
    builder.setTitle(spinnerTitle);

    final LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    final View view = inflater.inflate(R.layout.alert_dialog_listview_search, null);
    builder.setView(view);

    final ListView listView = (ListView) view.findViewById(R.id.alertSearchListView);
    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    listView.setFastScrollEnabled(false);
    adapter = new MyAdapter(getContext(), items);
    listView.setAdapter(adapter);

    final TextView emptyText = (TextView) view.findViewById(R.id.empty);
    listView.setEmptyView(emptyText);

    final EditText editText = (EditText) view.findViewById(R.id.alertSearchEditText);
    editText.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            adapter.getFilter().filter(s.toString());
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });

    builder.setPositiveButton("Done", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {

            Log.i(TAG, " ITEMS : " + items.size());
            dialog.cancel();
        }
    });

    builder.setOnCancelListener(this);
    ad = builder.show();
    return true;
}

public void setItems(List<KeyPairBoolData> items, int position, SpinnerListener listener) {

    this.items = items;
    this.listener = listener;

    StringBuilder spinnerBuffer = new StringBuilder();

    for (int i = 0; i < items.size(); i++) {
        if (items.get(i).isSelected()) {
            spinnerBuffer.append(items.get(i).getName());
            spinnerBuffer.append(", ");
        }
    }
    if (spinnerBuffer.length() > 2)
        defaultText = spinnerBuffer.toString().substring(0, spinnerBuffer.toString().length() - 2);

    ArrayAdapter<String> adapterSpinner = new ArrayAdapter<>(getContext(), R.layout.textview_for_spinner, new String[]{defaultText});
    setAdapter(adapterSpinner);

    if (position != -1) {
        items.get(position).setSelected(true);
        //listener.onItemsSelected(items);
        onCancel(null);
    }
}

public interface LimitExceedListener {
    void onLimitListener(KeyPairBoolData data);
}

//Adapter Class
public class MyAdapter extends BaseAdapter implements Filterable {

    List<KeyPairBoolData> arrayList;
    List<KeyPairBoolData> mOriginalValues; // Original Values
    LayoutInflater inflater;

    public MyAdapter(Context context, List<KeyPairBoolData> arrayList) {
        this.arrayList = arrayList;
        inflater = LayoutInflater.from(context);
    }

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

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

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

    private class ViewHolder {
        TextView textView;
        CheckBox checkBox;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        Log.i(TAG, "getView() enter");
        final ViewHolder holder;

        if (convertView == null) {
            holder = new ViewHolder();
            convertView = inflater.inflate(R.layout.item_listview_multiple, parent, false);
            holder.textView = (TextView) convertView.findViewById(R.id.alertTextView);
            holder.checkBox = (CheckBox) convertView.findViewById(R.id.alertCheckbox);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        final int backgroundColor = (position % 2 == 0) ? R.color.list_background : R.color.list_background;
        convertView.setBackgroundColor(ContextCompat.getColor(getContext(), backgroundColor));

        if (position==0)
        {
            holder.textView.setTextColor(Color.BLACK);

        }
        if (position==3)
        {
        holder.textView.setTextColor(Color.GREEN);
            convertView.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.list_selected));
        }

        final KeyPairBoolData data = arrayList.get(position);

        holder.textView.setText(data.getName());
        holder.textView.setTypeface(null, Typeface.NORMAL);
        holder.checkBox.setChecked(data.isSelected());

        convertView.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (data.isSelected()) { // unselect
                    selected--;
                } else if (selected == limit) { // select with limit
                    if (limitListener != null)
                        limitListener.onLimitListener(data);
                    return;
                } else { // selected
                    selected++;
                }

                final ViewHolder temp = (ViewHolder) v.getTag();
                temp.checkBox.setChecked(!temp.checkBox.isChecked());

                data.setSelected(!data.isSelected());
                Log.i(TAG, "On Click Selected Item : " + data.getName() + " : " + data.isSelected());
            }
        });
        holder.checkBox.setTag(holder);

        return convertView;
    }

    @SuppressLint("DefaultLocale")
    @Override
    public Filter getFilter() {
        return new Filter() {

            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {

                arrayList = (List<KeyPairBoolData>) results.values; // has the filtered values
                notifyDataSetChanged();  // notifies the data with new filtered values
            }

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults results = new FilterResults();        // Holds the results of a filtering operation in values
                List<KeyPairBoolData> FilteredArrList = new ArrayList<>();

                if (mOriginalValues == null) {
                    mOriginalValues = new ArrayList<>(arrayList); // saves the original data in mOriginalValues
                }

                /********
                 *
                 *  If constraint(CharSequence that is received) is null returns the mOriginalValues(Original) values
                 *  else does the Filtering and returns FilteredArrList(Filtered)
                 *
                 ********/
                if (constraint == null || constraint.length() == 0) {

                    // set the Original result to return
                    results.count = mOriginalValues.size();
                    results.values = mOriginalValues;
                } else {
                    constraint = constraint.toString().toLowerCase();
                    for (int i = 0; i < mOriginalValues.size(); i++) {
                        Log.i(TAG, "Filter : " + mOriginalValues.get(i).getName() + " -> " + mOriginalValues.get(i).isSelected());
                        String data = mOriginalValues.get(i).getName();
                        if (data.toLowerCase().contains(constraint.toString())) {
                            FilteredArrList.add(mOriginalValues.get(i));
                        }
                    }
                    // set the Filtered result to return
                    results.count = FilteredArrList.size();
                    results.values = FilteredArrList;
                }
                return results;
            }
        };
    }
}
}

从我的主要活动

 MultiSpinnerSearch searchSpinner = (MultiSpinnerSearch) findViewById(R.id.searchMultiSpinner);

    searchSpinner.setItems(listArray, -1, new SpinnerListener() {

        @Override
        public void onItemsSelected(List<KeyPairBoolData> items) {

            for (int i = 0; i < items.size(); i++) {
                if (items.get(i).isSelected()) {
                    Log.i("TAG", i + " : " + items.get(i).getName() + " : " + items.get(i).isSelected());
                    FlashMessage(i + " : " + items.get(i).getName() + " : " + items.get(i).isSelected());
                    if (GroupName.equals(""))
                    {
                        GroupName=GroupName+items.get(i).getName();
                        Group_stuid=Group_stuid+student_idlist[i+1];
                    }
                    else
                    {
                        GroupName=GroupName+","+items.get(i).getName();
                        Group_stuid=Group_stuid+"@"+student_idlist[i+1];
                    }
                }
            }
            FlashMessage("grp name : "+GroupName);
            FlashMessage("grp id : "+Group_stuid);
            Audiofilename=appfunct.checkfile(eventType,acdses_sct,class_sct,category_sct,subject_sct,test_sct,Group_stuid,GroupName);
            outfolder=appfunct.outfldr();
            Group_stuid=Group_stuid.replaceAll("/","-");
            File create_stuid=new File(outfolder.toString()+"/"+Group_stuid);
            if(!create_stuid.exists()) {
                create_stuid.mkdirs();
            }
            FlashMessage(""+GroupFoldername);
            Group_listFiles=appfunct.showlistfiles(GroupFoldername);
            if (Group_listFiles != null)
            {
                final CustomGroupFolder_ListDispaly adapter1 = new CustomGroupFolder_ListDispaly(Group_recording.this,R.layout.group_item_listview,Group_listFiles);
                group_listview.setAdapter(adapter1);
            }
            GroupName="";
            Group_stuid="";
            selected_students=appfunct.getSelectedNamesGroup(GroupFoldername);
        }
    });

    FlashMessage("out : grp id "+Group_stuid);

    searchSpinner.setLimit(2, new MultiSpinnerSearch.LimitExceedListener() {
        @Override
        public void onLimitListener(KeyPairBoolData data) {
            Toast.makeText(getApplicationContext(),
                    "Limit exceed ", Toast.LENGTH_LONG).show();
        }
    });

1 个答案:

答案 0 :(得分:0)

将此应用于适配器adapter.notifyDataSetChanged();