2016-10-15 3 views
0

Я хочу обновить getview() базового адаптера каждый раз, когда пользователь нажимает на multispinner. Также хочет отменить выбор всех выбранных флажков. Кто-нибудь, пожалуйста, помогите.Как обновить адаптер и отменить выбор всех элементов каждый раз, когда пользователь нажимает на multispinner?

Blockquote

Ниже мой 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(); 
     } 
    }); 

ответ

0

применить это к адаптеру adapter.notifyDataSetChanged();

+0

Я пробовал этот one.Still это не работает. –

+0

Наконец-то я получил работу. –

+0

Просто добавьте бит-код в getview() –