如何刷新适配器和取消选择所有项目时,每次用户单击多旋转器



我想在每次用户单击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;
            }
        };
    }
}
}

And from my main activity

 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();
        }
    });

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

相关内容

  • 没有找到相关文章

最新更新