Search code examples
android-listviewandroid-sqliteandroid-viewholder

How to customize listview that uses sqliteopenhelper?


I am trying to customize listview (specifically changing the font size and color) that lists out some information that I saved using SQLiteOpenHelper. To do so, I try to connect the customized setting in list_view_items.xml in ListViewAdapter.java. However, my listview is not customized, showing the basic font and size as follows:

enter image description here

How can I fix this problem to show the customized list?

Here is ListViewAdapter.java:

package com.example.dailybible3;

import android.content.Context;
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 androidx.annotation.NonNull;

import com.example.dailybible3.ListViewDataModel;
import com.example.dailybible3.R;

import java.util.ArrayList;

public class ListViewAdapter  extends ArrayAdapter<ListViewDataModel> implements View.OnClickListener {

    private ArrayList<ListViewDataModel> dataSet;
    Context mContext;

    // View lookup cache
    private static class ViewHolder {
        TextView list_view_item;
    }

    public ListViewAdapter(ArrayList<ListViewDataModel> data, Context context) {
        super(context, R.layout.list_view_items, data);
        this.dataSet = data;
        this.mContext=context;

    }

    @Override
    public void onClick(View v) {
        int position=(Integer) v.getTag();
        Object object= getItem(position);
        ListViewDataModel dataModel = (ListViewDataModel) object;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Get the data item for this position
        ListViewDataModel dataModel = getItem(position);
        // Check if an existing view is being reused, otherwise inflate the view
        ViewHolder viewHolder; // view lookup cache stored in tag

        final View result;

        if (convertView == null) {

            viewHolder = new ViewHolder();
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.list_view_items, parent, false);
            viewHolder.list_view_item = (TextView) convertView.findViewById(R.id.text);

            result = convertView;

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

        viewHolder.list_view_item.setText(dataModel.getNote());

        // Return the completed view to render on screen
        return convertView;
    }
}

And here is my listview_items.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:theme="@style/FontStyle"
    android:orientation="vertical">

    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginEnd="20dp"
        android:text="Example"
        android:textColor="@color/colorPrimary"
        android:textSize="15sp"
        android:textStyle="bold"
        android:lineSpacingMultiplier="1.3"/>

</LinearLayout>

Solution

  • I found that it was a simple mistake that I used android.R.layout.simple_list_item_1 instead of the layout that I want to use. Just in case anyone finds similar problems like mine, I will leave my codes below.

    My previous code:

    ListAdapter adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, listData);
    mListView.setAdapter(adapter);
    

    My edited code:

    ListAdapter adapter = new ArrayAdapter<String>(getContext(),R.layout.list_view_items, listData);
    mListView.setAdapter(adapter);