Search code examples
javaandroidandroid-sqlite

How To Show specific Data From SQLite Database In Android ListView


I have one table in SQLite database which has two fields one is "b" and another is "n" "b" represent book number and "n" represent book names I am successfully fetching all "n" field in my list view now I want when any user click particular list item show book b number which in my database, for example, I have book n=Genesis when anyone click on Genesis it show book number like b=1; here my code an database structure

  */

    public class Bookname extends Fragment {
        private ListView listView;
        private ArrayList<String> stringArrayList;
        private ArrayAdapter<String> adapter;
        private DatabaseHelper mDBHelper;
        private SQLiteDatabase mDb;
       boolean book;

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


        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            View view = inflater.inflate(R.layout.fragment_bookname, container, false);

            setData();
            listView = view.findViewById(R.id.list);
            adapter = new ListViewAdapter((MainActivity) getContext(), R.layout.item_listview, stringArrayList);
            listView.setAdapter(adapter);

            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {




                }
            });
            return view;
        }

        private void setData() {


            stringArrayList = new ArrayList<>();

            mDBHelper = new DatabaseHelper(getContext());
            mDb = mDBHelper.getReadableDatabase();

            Cursor cursor = mDb.rawQuery("SELECT b, n  FROM key_english;", new String[]{});

            if (cursor.getCount() == 0) {
                Toast.makeText(getContext(), "NO DATA FOUND", Toast.LENGTH_SHORT).show();
            } else {
                while (cursor.moveToNext()) {

                    stringArrayList.add(cursor.getString(1));


                }
            }
        }
    }


Myadopter class


package bible.swordof.God;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.amulyakhare.textdrawable.TextDrawable;
import com.amulyakhare.textdrawable.util.ColorGenerator;

import java.util.List;

public class ListViewAdapter extends ArrayAdapter<String> {

    private MainActivity activity;
    private List<String> friendList;

    public ListViewAdapter(MainActivity context, int resource, List<String> objects) {
        super(context, resource, objects);
        this.activity = context;
        this.friendList = objects;
    }

    @Override
    public int getCount() {
        return friendList.size();
    }

    @Override
    public String getItem(int position) {
        return friendList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        // If holder not exist then locate all view from UI file.
        if (convertView == null) {
            // inflate UI from XML file
            convertView = inflater.inflate(R.layout.item_listview, parent, false);
            // get all UI view
            holder = new ViewHolder(convertView);
            // set tag for holder
            convertView.setTag(holder);
        } else {
            // if holder created, get tag from view
            holder = (ViewHolder) convertView.getTag();
        }

        holder.friendName.setText(getItem(position));

        //get first letter of each String item
        String firstLetter = String.valueOf(getItem(position).charAt(0));

        ColorGenerator generator = ColorGenerator.MATERIAL; // or use DEFAULT
        // generate random color
        int color = generator.getColor(getItem(position));

        TextDrawable drawable = TextDrawable.builder()
                .buildRound(firstLetter, color); // radius in px

        holder.imageView.setImageDrawable(drawable);

        return convertView;
    }

    private class ViewHolder {
        private ImageView imageView;
        private TextView friendName;

          public ViewHolder(View v) {
            imageView = (ImageView) v.findViewById(R.id.image_view);
            friendName = (TextView) v.findViewById(R.id.text);
        }
    }
}



[My database structure][1]


  [1]: https://i.sstatic.net/7aXut.png


Solution

  • Create model Like:

    public class BookData {
    
    private String bookNo;
    private String bookName;
    
    BookData(String bookNo, String bookName){
        this.bookNo = bookNo;
        this.bookName = bookName;
    }
    
    public String getBookNo() {
        return bookNo;
    }
    
    public void setBookNo(String bookNo) {
        this.bookNo = bookNo;
    }
    
    public String getBookName() {
        return bookName;
    }
    
    public void setBookName(String bookName) {
        this.bookName = bookName;
    } }
    

    Create ArrayList object like:

    ArrayList<BookData> stringArrayList = new ArrayList<>();
    

    Store your data in model

    stringArrayList.add(new BookData(cursor.getString(0),cursor.getString(1)));
    

    And retrieve data using:

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                     String bookNo = stringArrayList.get(position).getBookNo();
                     Log.e("BookNo : ", bookNo);
                }
            });