在edittext中搜索后,Android在核对清单中取消选中复选框

时间:2015-01-24 13:16:34

标签: android checkbox

我有搜索功能的清单(使用了edittext)。当我使用它来搜索它时显示过滤的项目,以便我可以进行我想要的选择,它可以正常工作。但是,当搜索功能重新加载列表时,检查的项目将被取消选中。我希望在搜索之前选择的项目保持选中状态。我怎样才能解决这个问题?

这是我的代码:

public class Lab extends Fragment {  
Button mViewBtn,msaveBtn;    
EditText mReviewdateEdt,mInputSearch;  
TextView mMostprecrdTxv,mViewmoreTxv;  
View android;
//   final Context context = getActivity();
MyCustomAdapter dataAdapter = null;
ListView listView;
DatabaseHandler db;
SQLiteDatabase db1;
Pharmacy mPharmacyFrag;  
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState)   {

    android = inflater.inflate(R.layout.lab_frag, container, false);

    db=new DatabaseHandler(getActivity());


    getIds();
    displayListView();
    viewAlertDialog();
    saveAlertdialog();

    return android;
}

private void getIds() {
    // TODO Auto-generated method stub
    mViewBtn = (Button)android.findViewById(R.id.view);
    msaveBtn = (Button)android.findViewById(R.id.save);

    mInputSearch = (EditText)android.findViewById(R.id.inputSearch);

    listView = (ListView)android.findViewById(R.id.list);

 }

ArrayList<States> stateList = new ArrayList<States>();
ArrayList<States> text_sort = new ArrayList<States>();



private void displayListView()
{


    stateList = new ArrayList<States>();

    States _states = new States("17 KETOSTERIODS","",false);
    stateList.add(_states);        

    _states = new States("17-ALPHA HYDROXY PROGESTERON","",false);
    stateList.add(_states);
    _states = new States("24 HRS URINE ALBUMIN","",false);
    stateList.add(_states);
    _states = new States("24HRS URINARYCORTISOL/CREATININE RATIO","",false);
    stateList.add(_states);
    _states = new States("24HRS URINE PROTEIN","",false);
    stateList.add(_states);
    _states = new States("2D ECHO","",false);
    stateList.add(_states);
    _states = new States("2D ECHO&DOPPLER STUDY","",false);
    stateList.add(_states);
    _states = new States("5-HYDROXY INDOLE ACETIC ACID","",false);
    stateList.add(_states);
    _states = new States("ABSOLUTE EOSINOPHIL COUNT","",false);
    stateList.add(_states);
    _states = new States("ABSOLUTE NEUTROPHILIC COUNT","",false);
    stateList.add(_states);

    dataAdapter = new MyCustomAdapter(getActivity().getBaseContext(),R.layout.state_info, stateList);


    listView.setAdapter(dataAdapter);



    mInputSearch.addTextChangedListener(new TextWatcher()
    {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3)
        {

            int textlength = mInputSearch.getText().length();
            text_sort.clear();

            for (int i = 0; i < stateList.size(); i++)
            {
                   System.out.println("firstlooop"+mInputSearch.getText().toString());
                System.out.println("names"+stateList.get(i).getCode());
                if (stateList.get(i).getCode().toLowerCase().contains(mInputSearch.getText().toString())||stateList.get(i).getCode().toUpperCase().contains(mInputSearch.getText().toString()))  

                {
                    States _states = new States(stateList.get(i).getCode(),"",false);
                    text_sort.add(_states);
                    System.out.println("Gdafdhujgkgj");

                }
            }

            System.out.println("text_sort"+text_sort.size());
            dataAdapter = new MyCustomAdapter(getActivity(),R.layout.state_info, text_sort);
            listView.setAdapter(dataAdapter);
            dataAdapter.notifyDataSetChanged();
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                      int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub
        }

    });



private class MyCustomAdapter extends ArrayAdapter<States>


{

    private LayoutInflater vi;
    private ArrayList<States> stateList;


    public MyCustomAdapter(Context context, int textViewResourceId,

                           ArrayList<States> stateList)
    {

        super(context, textViewResourceId, stateList);
        this.stateList = new ArrayList<States>();
        this.stateList.addAll(stateList);

  vi = (LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    }

    private class ViewHolder
    {
        TextView code;
        CheckBox name;
    }

 @Override

    public View getView(int position, View convertView, ViewGroup parent)

    {

        ViewHolder holder = null;

        Log.v("ConvertView", String.valueOf(position));

        if (convertView == null)
        {
            convertView = vi.inflate(R.layout.state_info, null);

            holder = new ViewHolder();
            holder.code = (TextView) convertView.findViewById(R.id.code);

            holder.name =(CheckBox)convertView.findViewById(R.id.checkBox1);

            convertView.setTag(holder);

            holder.name.setOnClickListener( new View.OnClickListener()

            {
                public void onClick(View v)
                {
                    CheckBox cb = (CheckBox) v;

                    States _state = (States) cb.getTag();

                    _state.setSelected(cb.isChecked());



                }
            });

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

        States state = stateList.get(position);

        holder.code.setText( state.getCode());

        holder.name.setText(state.getName());

        holder.name.setChecked(state.isSelected());

        holder.name.setTag(state);

        return convertView;
    }

}



private void viewAlertDialog()
{


    mViewBtn.setOnClickListener(new View.OnClickListener() {



        @Override


        public void onClick(View arg0) {


 AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());              

            StringBuffer responseText = new StringBuffer();

            ArrayList<States> stateList = dataAdapter.stateList;

            for(int i=0;i<stateList.size();i++)
            {
                States state = stateList.get(i);

                if(state.isSelected())
                {
                    responseText.append("\n\n" + state.getCode());

                }
            }
 final TextView myView = new TextView(getActivity());

            myView.setText("Selected Tests are : \n"+responseText);

            myView.setTextSize(14);

            alertDialogBuilder.setCustomTitle(myView);

            alertDialogBuilder.setCancelable(false);

  alertDialogBuilder.setNegativeButton("Close",new DialogInterface.OnClickListener()

            {
                @Override
                public void onClick(DialogInterface arg0, int arg1)
                {

                }
            });



            AlertDialog alertDialog = alertDialogBuilder.create();

            alertDialog.show();

        }


    });
}

private void saveAlertdialog()
 {

    // TODO Auto-generated method stub

    msaveBtn.setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View arg0) {

          AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());


            alertDialogBuilder.setMessage("Lab Orders Saved");
            alertDialogBuilder.setCancelable(false);

    alertDialogBuilder.setNegativeButton("PHARMACY",newDialogInterface.OnClickListener() 
{
                @Override

                public void onClick(DialogInterface arg0, int arg1) {

                    int newFragmentNumber = 1;

   ((Tabswipe) getActivity()).setDisplayedFragment(newFragmentNumber);

                }
            });


            AlertDialog alertDialog = alertDialogBuilder.create();        
            alertDialog.show();
            StringBuffer responseText = new StringBuffer();
            ArrayList<States> stateList = dataAdapter.stateList;

            for(int i=0;i<stateList.size();i++)
            {
                States state = stateList.get(i);

                if(state.isSelected())
                {
                    responseText.append("\n" + state.getCode());

                }
            }

            db1=db.getWritableDatabase();

            ContentValues values=new ContentValues();


            values.put("LabTests",String.valueOf(responseText));

            db1.insert("Labtests", null, values);
            Cursor cursor=db1.rawQuery("select * from Labtests", null);
            if(cursor!=null)
            {
                if(cursor.moveToFirst())
                {
                    do

                    {

String tests=cursor.getString(cursor.getColumnIndex("LabTests"));

                    }while(cursor.moveToNext());
                }
            }
        }



    });

}

}






public class States {

 String code = null;
    String name = null;
    boolean selected = false;

    public States(String code, String name, boolean selected)
    {
        super();
        this.code = code;
        this.name = name;
        this.selected = selected;
    }

    public String getCode()
    {
        return code;
    }

    public void setCode(String code)
    {
        this.code = code;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public boolean isSelected()
    {
        return selected;
    }

    public void setSelected(boolean selected)
    {
        this.selected = selected;
    }

}

1 个答案:

答案 0 :(得分:0)

每次更改关联的编辑文本的值时,ListView都会回收视图。这就是Check-box不保留状态的原因。

完成任务:

将选中的项目存储在数组中。 单击列表视图中的任何复选框时,更改数组中该特定项的值。 在getView方法中,通过读取数组中的值来选中或取消选中复选框。 这样您的复选框将保留其状态。我希望这很清楚。