In this app, the user will input the item detail and save it in the SQLite database. and display the saved item in a recyclerView. Now I need more two feature to add. First is to search from the list item. second is to make the item clickable so that if an item is clicked it'll take to a detail view activity. here is my ItemListActivity java class file
package com.example.autoparts;
public class ItemListActivity extends AppCompatActivity {
Context context = ItemListActivity.this;
private RecyclerView itemsRecycler;
private ArrayList<Items> listItems;
private SearchView iSearchView;
private SearchManager manager;
//To customize the layout property
private RecyclerView.LayoutManager itemLayoutManager;
//calling the ItemAdapter
private ItemAdapter itemAdapter;
//calling the dbhelper class
PartsDbHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item_list);
//Recycler View for items to display
itemsRecycler = (RecyclerView) findViewById(R.id.items_recycler_view);
dbHelper = new PartsDbHelper(this);
manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
//set the fixed size of the RecyclerView
itemsRecycler.setHasFixedSize(true);
//setting Linear as layout
itemsRecycler.setLayoutManager(new LinearLayoutManager(this));
itemAdapter = new ItemAdapter(listItems, this);
generateObjects();
getItemsFromSQLite();
}
private void generateObjects() {
listItems = new ArrayList<>();
itemAdapter = new ItemAdapter(listItems, this);
RecyclerView.LayoutManager layoutManager = new
LinearLayoutManager(getApplicationContext());
itemsRecycler.setLayoutManager(layoutManager);
itemsRecycler.setAdapter(itemAdapter);
dbHelper = new PartsDbHelper(this);
}
private void getItemsFromSQLite() {
//AsyncTask is used that sqlite operation not blocks the UI Thread
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
listItems.clear();
listItems.addAll(dbHelper.getAllItems());
return null;
}
protected void onPostExecute(Void params) {
super.onPostExecute(params);
itemAdapter.notifyDataSetChanged();
}
}.execute();
}
//Building Menu
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
final MenuItem item = menu.findItem(R.id.searchMenu);
SearchView searchView = (SearchView) item.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
if (!TextUtils.isEmpty(s)) {
}
return true;
}
@Override
public boolean onQueryTextChange(String s) {
ArrayList<String> itemList = new ArrayList<>();
for (String items : itemList) {
if (items.toLowerCase().contains(s.toLowerCase())) ;
itemList.add(items);
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>
(ItemListActivity.this,
android.R.layout.simple_list_item_1, itemList);
return true;
}
});
return true;
}
}
this is my item adapter class
package com.example.autoparts;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
public class ItemAdapter extends RecyclerView.Adapter<ItemHolder> {
Context iContext;
List<Items> itemsList;
public ItemAdapter(List<Items> itemsList, Context context) {
this.itemsList = itemsList;
iContext = context;
}
//Initiating viewHolder
@Override
public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.view, null);
//Holder
ItemHolder iHolder = new ItemHolder(v);
return iHolder;
}
@Override
public void onBindViewHolder(ItemHolder itemHolder, int i) {
Items item = itemsList.get(i);
itemHolder.itemNameTextView.setText(item.getItem());
itemHolder.itemVendorTextView.setText(item.getVendor());
itemHolder.itemQtyTextView.setText(Integer.toString(item.getQty()));
itemHolder.itemPriceTextView.setText(Integer.toString(item.getPrice()));
}
@Override
public int getItemCount() {
if (itemsList != null)
return itemsList.size();
else
return 0;
}
}
this is a view holder class
package com.example.autoparts;
public class ItemHolder extends RecyclerView.ViewHolder {
// public final View view;
public TextView itemNameTextView;
public TextView itemVendorTextView;
public TextView itemQtyTextView;
public TextView itemPriceTextView;
public ItemHolder(View itemView) {
super(itemView);
itemNameTextView = (TextView)itemView.findViewById(R.id.item_name_text_view);
itemVendorTextView = (TextView)itemView.findViewById(R.id.item_vendor_text_view);
itemQtyTextView = (TextView) itemView.findViewById(R.id.item_qty_text_view);
itemPriceTextView = (TextView) itemView.findViewById(R.id.item_price_text_view);
}
}
this is menu xml file
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/searchMenu"
android:icon="@drawable/ic_action_search"
android:title="@string/search_title"
app:actionViewClass="android.widget.SearchView"
app:showAsAction="collapseActionView|ifRoom" />
</menu>