mardi 28 juillet 2015

filter listview using searchview

I have a list for that i want to add search function using search view. i have sqlite database and two fragments in which i am adding products and in another i am displaying the products in list view. i want to filter this list. how can i achieve this? i have searched many links but by searching all i have got confused..I am new to android so plz anyone can help? your help will be appretiated.. thnk u..

this is my main activity

public class MainActivity extends AppCompatActivity implements android.support.v7.widget.SearchView.OnQueryTextListener{

     Toolbar mToolbar;
    public DrawerLayout mDrawerLayout;
    NavigationView mNavigationView;
    FrameLayout mContentFrame;
    FragmentManager fragmentManager;
    private static final String PREFERENCES_FILE = "mymaterialapp_settings";
    private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned";
    private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";

    private boolean mUserLearnedDrawer;
    private boolean mFromSavedInstanceState;
    private int mCurrentSelectedPosition;
    public ArrayList<Item> arrayList;
    public DBHandler db;
    ArrayList<Item> array_data;
   public SearchView searchView;
    ListView listview;
   public ArrayAdapter<Item> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nav_drawer);


        setUpToolbar();
        arrayList=new ArrayList<Item>();
        array_data=new ArrayList<Item>();
        db = new DBHandler(this);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.nav_drawer);

        mUserLearnedDrawer = Boolean.valueOf(readSharedSetting(this, PREF_USER_LEARNED_DRAWER, "false"));

        if (savedInstanceState != null) {
            mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
            mFromSavedInstanceState = true;
        }
        firstTimeFrag();
        setUpNavDrawer();

        mNavigationView = (NavigationView) findViewById(R.id.nav_view);
        mContentFrame = (FrameLayout) findViewById(R.id.nav_contentframe);

        mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {

                Fragment newFragment;
                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                menuItem.setChecked(true);
                switch (menuItem.getItemId()) {
                    case R.id.navigation_item_1:
                        newFragment = new AddStock();
                        transaction.replace(R.id.nav_contentframe, newFragment);
                      //  transaction.addToBackStack(null);
                        transaction.commit();
                        mCurrentSelectedPosition = 0;
                        mDrawerLayout.closeDrawers();
                        return true;
                    case R.id.navigation_item_2:
                        newFragment = new ViewStock();
                        transaction.replace(R.id.nav_contentframe, newFragment);
                     //   transaction.addToBackStack(null);
                        transaction.commit();
                        mCurrentSelectedPosition = 1;
                        mDrawerLayout.closeDrawers();
                        return true;
                    default:
                        return true;
                }
            }
        });
        //fragmentManager.beginTransaction().replace(R.id.nav_contentframe, fragment).commit();

    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION, 0);
        Menu menu = mNavigationView.getMenu();
        menu.getItem(mCurrentSelectedPosition).setChecked(true);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
     MenuInflater inflater = getMenuInflater();
      inflater.inflate(this,R.menu.menu_main);
     }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case R.id.action_settings:

            case R.id.search_view:
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    private void setUpToolbar() {
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        if (mToolbar != null) {
            setSupportActionBar(mToolbar);
        }
    }

    private void setUpNavDrawer() {
        if (mToolbar != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            mToolbar.setNavigationIcon(R.drawable.ic_drawer);
            mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mDrawerLayout.openDrawer(GravityCompat.START);
                }
            });
        }

        if (!mUserLearnedDrawer) {
            mDrawerLayout.openDrawer(GravityCompat.START);
            mUserLearnedDrawer = true;
            saveSharedSetting(this, PREF_USER_LEARNED_DRAWER, "true");
        }

    }

    public static void saveSharedSetting(Context ctx, String settingName, String settingValue) {
        SharedPreferences sharedPref = ctx.getSharedPreferences(PREFERENCES_FILE, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString(settingName, settingValue);
        editor.apply();
    }

    public static String readSharedSetting(Context ctx, String settingName, String defaultValue) {
        SharedPreferences sharedPref = ctx.getSharedPreferences(PREFERENCES_FILE, Context.MODE_PRIVATE);
        return sharedPref.getString(settingName, defaultValue);
    }
    private void firstTimeFrag(){

            Fragment fr = new ViewStock();
            FragmentManager fm = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fm.beginTransaction();
            fragmentTransaction.replace(R.id.nav_contentframe, fr);
            fragmentTransaction.commit();

    }
}


this is my item class

public class Item  {
    public int id;
    public String item_name;
    public String item_desc;
    public String item_qty;

    public Item(){}
    public Item(int id ,String item_name,String item_desc,String item_qty) {
        super();
        this.item_name = item_name;
        this.item_desc = item_desc;
        this.item_qty = item_qty;
    }

    public Item(String item_name,String item_desc, String item_qty){
        this.item_name = item_name;
        this.item_desc=item_desc;
        this.item_qty = item_qty;
    }

    public int getID(){
        return id;
    }

    public void setID(int id){
        this.id= id;
    }
    public String getItem_name(){
        return item_name;
    }

    public void setItem_name(String item_name)
    {
        this.item_name=item_name;
    }

    public String getItem_desc()
    {
        return  item_desc;
    }
    public  void setItem_desc(String item_desc)
    {
        this.item_desc=item_desc;
    }
    public String getItem_qty()
    {
        return  item_qty;
    }
    public void setItem_qty(String item_qty) {
        this.item_qty = item_qty;
    }
}

this is my ItemAdapter

public class ItemAdapter extends ArrayAdapter<Item> implements Filterable {

        Context context;

 //   ValueFilter valueFilter;
    ArrayList<Item> mStringFilterList;
    ArrayList<Item> items;


    public ItemAdapter(Context context, int resourceId,
                                ArrayList<Item>  items) {
        super(context, resourceId, items);
        this.context = context;
        this.items=items;
        mStringFilterList=items;
    }

      public int getCount() {
            return items.size();
        }

        public Item getItem(int position) {
            return items.get(position);
        }

    public long getItemId(int position) {

        return position;
    }

        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            Item rowItem = getItem(position);
            LayoutInflater mInflater = (LayoutInflater) context
                    .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            if (convertView == null) {

                holder = new ViewHolder();
                convertView = mInflater.inflate(R.layout.list_item, null);

                holder.txtItemName = (TextView) convertView.findViewById(R.id.txt_item_name);
                holder.txtItemDesc = (TextView) convertView.findViewById(R.id.txt_item_desc);
                holder.txtItemQty = (TextView) convertView.findViewById(R.id.txt_item_qty);

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

            holder.txtItemName.setText(rowItem.getItem_name());
            holder.txtItemDesc.setText(rowItem.getItem_desc());
            holder.txtItemQty.setText(rowItem.getItem_qty());

            return convertView;
        }

        private class ViewHolder {
            TextView txtItemName;
            TextView txtItemDesc;
            TextView txtItemQty;
        }
}

this is my view stock fragment


public class ViewStock extends Fragment {

    public ViewStock() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootview = inflater.inflate(R.layout.fragment_view_stock, container, false);
        MainActivity act = (MainActivity) this.getActivity();
        act.listview = (ListView)rootview.findViewById(R.id.list);
        act.listview.setTextFilterEnabled(true);
        act.array_data = new ArrayList<Item>();
        // Context mCtx = getActivity().getApplicationContext();

     //   ItemAdapter adapter = new ItemAdapter(getActivity(), R.layout.list_item, act.arrayList);
       // listview.setAdapter(adapter);
        act.db = new DBHandler(getActivity());
        ArrayList<Item> item_array_from_db = act.db.Get_items();

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

            int idno = item_array_from_db.get(i).getID();
            String name = item_array_from_db.get(i).getItem_name();
            String desc = item_array_from_db.get(i).getItem_desc();
            String qty = item_array_from_db.get(i).getItem_qty();
            Item cnt = new Item();
            cnt.setID(idno);
            cnt.setItem_name(name);
            cnt.setItem_desc(desc);
            cnt.setItem_qty(qty);

            act.array_data.add(cnt);
        }
        act.db.close();
      act.adapter = new ItemAdapter(getActivity(), R.layout.list_item,
                act.array_data);
        act.listview.setAdapter(act.adapter);
        act.adapter.notifyDataSetChanged();

        return rootview;
    }
}

this is my database

public class DBHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "stock";
    private static final String TABLE_ITEMS = "items";

    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "itemname";
    private static final String KEY_DESC = "itemdesc";
    private static final String KEY_QTY = "itemqty";
    private final ArrayList<Item> array_list = new ArrayList<Item>();

    public DBHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_ITEMS_TABLE = "CREATE TABLE " + TABLE_ITEMS + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
                + KEY_DESC + " TEXT," + KEY_QTY + " INTEGER" + ")";
        db.execSQL(CREATE_ITEMS_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXISTS " + TABLE_ITEMS);
        onCreate(db);
    }


    public void Add_Item(Item item) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(KEY_NAME, item.getItem_name());
        values.put(KEY_DESC, item.getItem_desc());
        values.put(KEY_QTY, item.getItem_qty());

        db.insert(TABLE_ITEMS, null, values);
        db.close();
    }


   Item Get_Item(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_ITEMS, new String[] { KEY_ID,
                        KEY_NAME, KEY_DESC, KEY_QTY }, KEY_ID + "=?",
                new String[] { String.valueOf(id) }, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        Item item = new Item(Integer.parseInt(cursor.getString(0)),
                cursor.getString(1), cursor.getString(2), cursor.getString(3));

        cursor.close();
        db.close();

        return item;
    }


    public ArrayList<Item> Get_items() {
        try {
            array_list.clear();

            String selectQuery = "SELECT  * FROM " + TABLE_ITEMS;

            SQLiteDatabase db = this.getWritableDatabase();
            Cursor cursor = db.rawQuery(selectQuery, null);

            if (cursor.moveToFirst()) {
                do {
                    Item item = new Item();
                    item.setID(Integer.parseInt(cursor.getString(0)));
                    item.setItem_name(cursor.getString(1));
                    item.setItem_desc(cursor.getString(2));
                    item.setItem_qty(cursor.getString(3));

                    array_list.add(item);
                } while (cursor.moveToNext());
            }

            cursor.close();
            db.close();
            return array_list;
        } catch (Exception e) {
            // TODO: handle exception
            Log.e("all_contact", "" + e);
        }

        return array_list;
    }  
}

this is my view stock layout

<FrameLayout xmlns:android="http://ift.tt/nIICcg"
    xmlns:tools="http://ift.tt/LrGmb4" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="com.example.owner.stock.ViewStock">

    <!-- TODO: Update blank fragment layout -->
    <LinearLayout xmlns:android="http://ift.tt/nIICcg"
        android:orientation="horizontal" android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:baselineAligned="false"
        android:id="@+id/header"
        android:weightSum="1"
        android:background="#ff45f3ff">
    <TextView
        android:id="@+id/lbl_item_name"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:text="@string/txt_item_name"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textStyle="bold"
        android:layout_weight="0.33" />

        <TextView
            android:id="@+id/lbl_item_desc"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:text="@string/txt_item_desc"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textStyle="bold"
            android:layout_weight="0.33" />
        <TextView
            android:id="@+id/lbl_item_qty"
            android:layout_width="100dp"
            android:layout_height="match_parent"
            android:text="@string/txt_item_qty"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textStyle="bold"
            android:layout_weight="0.33" />
    </LinearLayout>



    <ListView
        android:layout_width="wrap_content"
        android:layout_height="462dp"
        android:id="@+id/list"
        android:layout_gravity="center"
        android:background="@android:color/background_light"
        />

</FrameLayout>

plz can anyone help me out for this?? I need to know can we use filter class for sqlite? and i have a fragment in that i have my list so how the search activity will be called??

Aucun commentaire:

Enregistrer un commentaire