简体   繁体   中英

Android : Adapter is not working with Arraylist of Hashmap

I am trying to show some data offline from SQLite database. Data is coming fine but I am not able to show that on listview with adapter.

libraryList.clear();
libraryList = dBhelper.localQuestionBank(student_uuid, questionBankId);
if (libraryList.size() > 0) {
    offSetFlag = libraryList.size();
    libraryListView.setAdapter(questionBankAdapter);
    questionBankAdapter.notifyDataSetChanged();
    libraryListView.removeFooterView(loadMoreView);
    loadingMore = false;
}

localQuestionBank method:

public ArrayList<Map<String, String>> localQuestionBank(String student_uuid, String question_bank_id) {
        ArrayList<Map<String, String>> localQuestionBankList = new ArrayList<>();
        ArrayList<Map<String, String>> questionBankList  = new ArrayList<>();
        String[] columns = new String[]{QUESTION_BANK_LABEL, AIP_UUID, QUESTION_SEQUENCE_NAME, QUESTION_MARKS, DESCRIPTION};
        SQLiteDatabase db = mDbHelper.getWritableDatabase();
        try {
            Cursor cursor = db.query(LOCAL_QUESTION_BANK, columns, STUDENT_UUID+"=?" +" and "+ QUESTION_BANK_ID+"=?", new String[] { student_uuid, question_bank_id }, null, null, null);
            if (cursor.moveToFirst()) {
                do {
                    Map<String, String> subMap = new HashMap<String, String>();
                    subMap.put("aep_uuid", cursor.getString(cursor.getColumnIndex(AIP_UUID)));
                    subMap.put("question_marks", cursor.getString(cursor.getColumnIndex(QUESTION_MARKS)));
                    subMap.put("question_sequence_name", cursor.getString(cursor.getColumnIndex(QUESTION_SEQUENCE_NAME)));
                    subMap.put("description", cursor.getString(cursor.getColumnIndex(DESCRIPTION)));
                    subMap.put("question_bank_label", cursor.getString(cursor.getColumnIndex(QUESTION_BANK_LABEL)));
                    questionBankList.add(subMap);
                } while (cursor.moveToNext());
                localQuestionBankList.addAll(questionBankList);
                questionBankList.clear();
            }
            cursor.close();
            db.close();
        } catch (SQLException sqlEx) {
            sqlEx.printStackTrace();
        }
        return localQuestionBankList;
    }

Listview and Adapter:

questionBankAdapter = new QuestionBankAdapter(getActivity(),libraryList);
libraryListView.setAdapter(questionBankAdapter);

questionBankAdapter:

package eukti.myafterclass.adapter;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.text.Html;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.Map;

import eukti.myafterclass.R;
import eukti.myafterclass.ui.QuestionBankDetailsView;
import eukti.myafterclass.utils.InternetConnectionDetector;

public class QuestionBankAdapter extends BaseAdapter {

    private final Activity context;
    private ArrayList<Map<String, String>> dashboardList;
    private static LayoutInflater inflater=null;


    public QuestionBankAdapter(Activity context,
                               ArrayList<Map<String, String>> dashList) {
        this.context = context;
        this.dashboardList = dashList;
        if (context!=null) {
            inflater = (LayoutInflater) context.
                    getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
    }

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

    @Override
    public Object getItem(int position) {
        return dashboardList.size();
    }

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

    public class Holder
    {
        TextView sequence;
        TextView marks;
        WebView description;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        Holder holder=new Holder();
        View rowView;
        Log.d("LocalQBadapter:", dashboardList.get(position).get("question_sequence_name"));
        rowView = inflater.inflate(R.layout.questionbank_items, null);
        holder.sequence=(TextView) rowView.findViewById(R.id.questionSequenceName);
        holder.marks=(TextView) rowView.findViewById(R.id.marks);
        holder.description=(WebView) rowView.findViewById(R.id.description);
        holder.description.getSettings().setJavaScriptEnabled(true);

        String heading = dashboardList.get(position).get("question_sequence_name");
        holder.sequence.setText(Html.fromHtml(heading));
        holder.marks.setText("Marks : "+dashboardList.get(position).get("question_marks"));

        String description = dashboardList.get(position).get("description");

        String allAns = "<html><body>"+description.replace("\r\n", "<br/>")+"</body></html>";
        holder.description.loadDataWithBaseURL(null, allAns, "text/html", "utf-8", null);

        holder.description.setOnLongClickListener(new View.OnLongClickListener() {

            @Override
            public boolean onLongClick(View v) {
                return true;
            }
        });
        holder.description.setLongClickable(false);

        rowView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!InternetConnectionDetector.isNetworkAvailable(context)) {
                    Toast.makeText(context, "Check your connection and try again.", Toast.LENGTH_LONG).show();
                } else {
                    Intent redirect = new Intent(context, QuestionBankDetailsView.class);
                    redirect.putExtra("aep_uuid", dashboardList.get(position).get("aep_uuid"));
                    redirect.putExtra("question_sequence_name", dashboardList.get(position).get("question_sequence_name"));
                    redirect.putExtra("question_marks", dashboardList.get(position).get("question_marks"));
                    redirect.putExtra("description", dashboardList.get(position).get("description"));
                    context.startActivity(redirect);
                }
            }
        });

        return rowView;
    }
}

It seems fine for me but data is not showing in Listview.

What you have typed

@Override
public Object getItem(int position) {
    return dashboardList.size();
}

what i think it should be

@Override
public Object getItem(int position) {
    return dashboardList.get(position);
}

try it and let me know

In your getItem() method you are returning the size . You need to give the actual object from the dataset dashboardList .

@Override
public Object getItem(int position) {
    return dashboardList.get(position);
}

Also in the getView code you can call the getItem method instead of accessing the dataset directly.

Map<String, String> item = (Map<String, String>) getitem(position);

Bind your UI from this item object. Also try to use a Viewholder pattern in your Adapter .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM