0
votes

Comment créer un adaptateur personnalisé pour utiliser Cardview for List View Inside Fragment

Je veux utiliser la vue de carte dans ma liste de liste qui se trouve à l'intérieur d'un fragment pour afficher 2 variable, je peux déjà vous connecter à la base de données et afficher une seule variable "nama_matkul" de JSON dans la vue de ma liste, mais je dois montrer " nama_matkul "et" sks "donc je crée une vision de carte mais je suis confus pour faire adaptateur de costum pour celui-ci

​​Ceci est ma réponse JSON P>

public class CustomAdapter extends ArrayAdapter<HashMap<String,String>>
{
    private ArrayList<HashMap<String,String>> callLogData;
    private Context context;
    private int resource;
    private View view;
    private Holder holder;
    private HashMap<String,String> hashMap;
    public CustomAdapter(Context context, int resource,ArrayList<HashMap<String, String>> objects)
    {
        super(context, resource, objects);
        this.context=context;
        this.resource=resource;
        this.callLogData=objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {

        LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view=inflater.inflate(resource, parent,false);

        holder=new Holder();
        holder.text_matkul=(TextView)view.findViewById(R.id.tv_matkul);
        holder.text_sks=(TextView)view.findViewById(R.id.tv_sks);

        hashMap=callLogData.get(position);

        Date date=new Date(Long.parseLong(hashMap.get(CallLog.Calls.DATE)));
        java.text.DateFormat dateFormat=DateFormat.getDateFormat(context);
        java.text.DateFormat timeformat=DateFormat.getTimeFormat(context);


        holder.text_matkul.setText(hashMap.get(CallLog.Calls.NUMBER));
        holder.text_sks.setText(timeformat.format(date));

        return view;
    }

    public class Holder
    {
        TextView text_matkul;
        TextView text_sks;
    }

}


0 commentaires

3 Réponses :


0
votes

@ toggan-jr Veuillez consulter cet exemple sur ce lien https://medium.com/@pang_yao/androïd-fragmentment-use-RecyClerView-Cardview-4bc10beac446 et essayez de mettre en œuvre selon l'exemple de démonstration.


0 commentaires

0
votes
public class CustomAdapter extends ArrayAdapter<HashMap<String, String>> {
    private final ArrayList<HashMap<String, String>> callLogData;
    private final Context context;
    private final int resource;

    /*
    This TODO code won't cause any issue even if not done.
    */
    //TODO : Check below comment
    private View view;

    //TODO :: NEED TO REMOVE as adapter handle multiple items therefore no meaning in having single field of holder object
    private Holder holder;
    //TODO :: NEED TO REMOVE same as above. you should get item from based on position provided in getView method no need to keep reference to it
    private HashMap<String, String> hashMap;

    public CustomAdapter(Context context, int resource, ArrayList<HashMap<String, String>> objects) {
        super(context, resource, objects);
        this.context = context;
        this.resource = resource;
        callLogData = objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        //Added local instance of holder
        View view = inflater.inflate(resource, parent, false);
        //Added local instance of holder
        Holder holder = new Holder();
        holder.text_matkul = (TextView) view.findViewById(R.id.tv_matkul);
        holder.text_sks = (TextView) view.findViewById(R.id.tv_sks);
        //Added local instance of holder
        HashMap<String, String> hashMap = callLogData.get(position);

        //Commenting below code
        /*
                Date date=new Date(Long.parseLong(hashMap.get(CallLog.Calls.DATE)));
                java.text.DateFormat dateFormat=DateFormat.getDateFormat(context);
                java.text.DateFormat timeformat=DateFormat.getTimeFormat(context);
        */


        holder.text_matkul.setText(hashMap.get("nama_matkul"));
        holder.text_sks.setText("sks");

        return view;
    }

    public class Holder {
        TextView text_matkul;
        TextView text_sks;
    }

}


public void initListView1() {
    Call<MatkulMhs> getMatkulMhs = mApiService.getMatkulMhs(
            mPrefs.getUserID());
    getMatkulMhs.enqueue(new Callback<MatkulMhs>() {
        @Override
        public void onResponse(Call<MatkulMhs> call, Response<MatkulMhs> response) {
            boolean iserror_ = response.body().getError();
            if (iserror_ == false) {
                List<Matkul_Mhs> list = new ArrayList<>();
                list = response.body().getMatkulMhs();
                ArrayList<HashMap<String, String>> nama_matkul = new ArrayList<>();
                for (int i = 0; i < list.size(); i++) {
                    HashMap<String, String> item = new HashMap<String, String>();
                    item.put("nama_matkul", list.get(i).getNamaMatkul());
                    item.put("sks", list.get(i).getSKS());
                    nama_matkul.add(item);
                }
                //Note: layout resource changed to your card view and ArrayAdapter  to CustomAdapter
                CustomAdapter adapter = new CustomAdapter(getActivity(), R.layout.form_mhs_02_cardview, nama_matkul);
                listview1.setAdapter(adapter);

            }
        }
    }
}

4 commentaires

Erreur lors de l'adaptateur CustomAdapter = Nouveau CustomApplePatter (getactivity (), r.layout.form_mhs_02_cardview, nama_matkul); Objet requis Java ... Java.lang.string >> Trouvé Java ... Java.lang.string> []


Modifier l'objet HASHMAP à la flambée des objets HASHMAP, comme ceci NAMA_MATKUL [I] = New ArrayList > (); . Cela devrait résoudre l'erreur ci-dessus. Comme je peux le voir à partir du code, dans le constructeur de l'adaptateur, vous devez transmettre une arraylist Pas un objet.


Ce code n'est que la modification de votre code d'origine. Si vous êtes intéressé par une amélioration des performances que vous souhaitez rechercher RecyclERView et RecyclERView.Adapter ou ListAdapter (Diffutil.ItemCallback)


Son n'a rien montré, quand j'essaie d'utiliser log.d in méthode Public View GeveView Ça n'a pas fonctionné



0
votes

Utilisez votre fichier de classe d'adaptateur personnalisé avant SetAdapter.

CustomApplePter Adapter = Nouveau CustomAppleTateur (getActivity (), Android.r.layout.simple_list_item_1, NAMA_MATKUL); xxx


2 commentaires

Le problème est que mon personnalisé est toujours faux et j'ai besoin de le changer


Ensuite, je vous suggérerai d'utiliser la vue Recycler. Pour les détails, vous pouvez utiliser ci-dessous un lien sur l'endroit où je donne la réponse Stackoverflow.com/Questions/58717944/... ou vous pouvez utiliser le projet GitHub Online Cake Shop By. Github.com/codeInsidecoffee/ ONLINECAKESHOPPING / Tree / Master / A PP / ... à l'UserModule Go Fragment Catégorie I Appelez l'adaptateur et dans la classe de l'adaptateur, vous pouvez voir la vue de ma classe d'adaptateur.