samedi 15 août 2015

Search with multi selection listview with checkbox is not working

Listview with checkbox working properly with scroll but when I put text in searchview,everything in listview is filtered on the basis of text but selected checkboxes are not on correct place on filtering listview.

Please help me....

Thanks in advance.

In listview class listview is set here

       lv1.setAdapter(custom1);
       public boolean onQueryTextChange(String newText) {

    lv1.setVisibility(View.VISIBLE);

    if (TextUtils.isEmpty(newText)) {
       // lv1.clearTextFilter();
        custom1.getFilter().filter("");


    } else {
        // lv.setFilterText(newText.toString());
        custom1.getFilter().filter(newText);
        custom1.notifyDataSetChanged();
        //      getFilterableArrayAdapter().getFilter().filter(prefix);

    }
    return true;
    //adapter.getFilter().filter(newText);
    //showResults(newText + "*");
    //return true;
}

public boolean onQueryTextSubmit(String query) {
    //showResults(query + "*");
    return true;
}

public boolean onClose() {
    //showResults("");

    // lv.setAdapter(customAdapter);
    //  searchView.setQuery(query, true);
    return true;
}

Adapter for list is here

public class Adapterr extends BaseAdapter implements Filterable {

private static final String TAG = Adapterr.class.getSimpleName();
ArrayList<DataModel1> listArray=null;
String userid;
ImageView ii;
String no;
Context context;
ProgressDialog pDialog;
ArrayList<DataModel1> countrylist;
ArrayList<DataModel1> mmStringFilterList = new ArrayList<DataModel1>();
ArrayList<DataModel1> mStringFilterList;
ValueFilter valueFilter;
int flag;
SparseBooleanArray mSparseBooleanArray;


public Adapterr(Context context, ArrayList<DataModel1> countrylist) {
    this.context = context;
    this.countrylist = countrylist;
    this.mStringFilterList = countrylist;
    mSparseBooleanArray = new SparseBooleanArray();
}


@Override
public int getCount() {
    return countrylist.size();    // total number of elements in the list
}

@Override
public Object getItem(int i) {
    return countrylist.get(i);    // single item in the list
}

@Override
public long getItemId(int i) {
    return i;                   // index number
}


public class ViewHolder{
    TextView textView;
    TextView textView1;
    ImageView ii;
    CheckBox checkbox;
}
public View getView(final int position, View convertView, ViewGroup parent)
{
    View vi=convertView;
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    vi = inflater.inflate (R.layout.liststyle, null);
    ViewHolder item=new ViewHolder();
    final DataModel1 dataModel = countrylist.get(position);
    no=dataModel.getOtherData();
    item.textView = (TextView)vi.findViewById(R.id.tvNameMain);
    item.textView.setText(dataModel.getName());
    item.textView1 = (TextView)vi.findViewById(R.id.tvNumberMain);
    item.textView1.setText(no);
    item.ii= (ImageView) vi.findViewById(R.id.ii);
    item.checkbox = (CheckBox) vi.findViewById(R.id.chkEnable);
    vi.setTag(item);
    ContentResolver contentResolver = context.getContentResolver();
    String contactId = null;
    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(no));

    String[] projection = new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID};

    Cursor cursor =
            contentResolver.query(
                    uri,
                    projection,
                    null,
                    null,
                    null);

    if (cursor != null) {
        while (cursor.moveToNext()) {
            contactId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID));
        }
        cursor.close();
    }

    Bitmap photo = BitmapFactory.decodeResource(context.getResources(),
            R.mipmap.icn_user_2_orange);

    try {
        InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(),
                ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, new Long(contactId)));

        if (inputStream != null) {
            photo = BitmapFactory.decodeStream(inputStream);
        }



    } catch (Exception e) {
        e.printStackTrace();
    }
    item.ii.setImageBitmap(photo);

    item.checkbox.setTag(position);


    item.checkbox.setChecked(mSparseBooleanArray.get(position));


    item.checkbox.setOnCheckedChangeListener(mCheckedChangeListener);

    return vi;
}
class getc extends AsyncTask<String, String, Bitmap> {

    /**
     * Before starting background thread Show Progress Dialog
     */
    String p = "yess";

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

    }

    @Override
    protected Bitmap doInBackground(String... args) {
        // TODO Auto-generated method stub
        // Check for success tag






        return null;

    }

    /**
     * After completing background task Dismiss the progress dialog
     * *
     */
    protected void onPostExecute(Bitmap photo) {


    }
}
CompoundButton.OnCheckedChangeListener mCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {




    @Override


    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {


        // TODO Auto-generated method stub


        mSparseBooleanArray.put((Integer) buttonView.getTag(), isChecked);


    }


};
public ArrayList<DataModel1> getCheckedItems() {


    ArrayList<DataModel1> mTempArry = new ArrayList<DataModel1>();




    for(int i=0;i<countrylist.size();i++) {


        if(mSparseBooleanArray.get(i)) {


            mTempArry.add(countrylist.get(i));


        }


    }




    return mTempArry;


}
@Override
public Filter getFilter() {
    if (valueFilter == null) {
        valueFilter = new ValueFilter();
    }
    return valueFilter;
}

private class ValueFilter extends Filter {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        FilterResults results = new FilterResults();

        if (constraint != null && constraint.length() > 0) {
            ArrayList<DataModel1> filterList = new ArrayList<DataModel1>();

            for (int i = 0; i < mStringFilterList.size(); i++) {
                if ( (mStringFilterList.get(i).getName().toUpperCase() )
                        .contains(constraint.toString().toUpperCase())) {

                    DataModel1 country = new DataModel1(mStringFilterList.get(i)
                            .getName() ,  mStringFilterList.get(i)
                            .getOtherData());

                    filterList.add(country);
                }
            }
            results.count = filterList.size();
            results.values = filterList;
        } else {
            results.count = mStringFilterList.size();
            results.values = mStringFilterList;
        }
        return results;

    }

    @Override
    protected void publishResults(CharSequence constraint,
                                  FilterResults results) {
        countrylist = (ArrayList<DataModel1>) results.values;
        notifyDataSetChanged();
    }

}
private void sendSMS(String phoneNumber, String message)
{
    String SENT = "SMS_SENT";
    String DELIVERED = "SMS_DELIVERED";

    PendingIntent sentPI = PendingIntent.getBroadcast(context, 0,
            new Intent(SENT), 0);

    PendingIntent deliveredPI = PendingIntent.getBroadcast(context, 0,
            new Intent(DELIVERED), 0);



    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
}

}




Aucun commentaire:

Enregistrer un commentaire