使用 CardView BaseAdapter OnItemClick 自定义 ListView

Custom ListView using CardView BaseAdapter OnItemClick

我真的需要帮助和一些解决方案

我尝试使用 CardViewBaseAdapter 制作自定义 ListView,我有 5 个项目列表。每个列表都包含图像、标题和描述。 我遇到了一些问题,我不知道如何使用 Click every ListView into different new activity

这是基础适配器java代码

package com.projectskripsi.wisatajogja.adapter;

import android.content.Context;
import android.media.Image;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.projectskripsi.wisatajogja.R;
import com.projectskripsi.wisatajogja.model.Model;

import java.util.ArrayList;



public class WisataAdapter extends BaseAdapter {

    private Context context;
    private ArrayList<Model> models;

    public WisataAdapter(Context context, ArrayList<Model> models) {
        this.context = context;
        this.models = models;
    }

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

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

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

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

            convertView = View.inflate(context , R.layout.list_item1 ,null);
        }
        ImageView images = (ImageView) convertView.findViewById(R.id.wisataimage);
        TextView title = (TextView) convertView.findViewById(R.id.namawisataTV);
        TextView about = (TextView) convertView.findViewById(R.id.wisatadesTV);

        Model model = models.get(position);

        images.setImageResource(model.getWisataimage());
        title.setText(model.getWisataTitle());
        about.setText(model.getAboutTitle());

        return convertView;
    }
}

和这个模型java

package com.projectskripsi.wisatajogja.model;




public class Model {

    private int wisataimage;
    private String wisataTitle;
    private String aboutTitle;

    public Model(int wisataimage, String wisataTitle, String aboutTitle) {
        this.wisataimage = wisataimage;
        this.wisataTitle = wisataTitle;
        this.aboutTitle = aboutTitle;
    }

    public int getWisataimage() {
        return wisataimage;
    }

    public void setWisataimage(int wisataimage) {
        this.wisataimage = wisataimage;
    }

    public String getWisataTitle() {
        return wisataTitle;
    }

    public void setWisataTitle(String wisataTitle) {
        this.wisataTitle = wisataTitle;
    }

    public String getAboutTitle() {
        return aboutTitle;
    }

    public void setAboutTitle(String aboutTitle) {
        this.aboutTitle = aboutTitle;
    }
}

和这个 MainActivity Java

package com.projectskripsi.wisatajogja;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import com.projectskripsi.wisatajogja.adapter.WisataAdapter;
import com.projectskripsi.wisatajogja.model.ListDetails1;
import com.projectskripsi.wisatajogja.model.Model;

import java.util.ArrayList;

public class GunungKidul extends AppCompatActivity {

    private ListView listView;
    private ArrayList<Model> models;
    private WisataAdapter wisataAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gunung_kidul);

        listView = (ListView) findViewById(R.id.listwisata1);
        models = ListDetails1.getList();

        wisataAdapter = new WisataAdapter(GunungKidul.this,models);
        listView.setAdapter(wisataAdapter);

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

                Model model = models.get(position);

                Intent intent = new Intent(GunungKidul.this, Pantai_Kesirat.class);
                intent.putExtra("wisataTittle", listView.getItemAtPosition(position).toString());
                startActivity(intent);




            }
        });

    }
}

谢谢你的回答..我真的需要帮助......

在你的模型中使用 Serializable class 像这样:

package com.projectskripsi.wisatajogja.model;

    public class Model implements Serializable {

        private int wisataimage;
        private String wisataTitle;
        private String aboutTitle;

        public Model(int wisataimage, String wisataTitle, String aboutTitle) {
            this.wisataimage = wisataimage;
            this.wisataTitle = wisataTitle;
            this.aboutTitle = aboutTitle;
        }

        public int getWisataimage() {
            return wisataimage;
        }

        public void setWisataimage(int wisataimage) {
            this.wisataimage = wisataimage;
        }

        public String getWisataTitle() {
            return wisataTitle;
        }

        public void setWisataTitle(String wisataTitle) {
            this.wisataTitle = wisataTitle;
        }

        public String getAboutTitle() {
            return aboutTitle;
        }

        public void setAboutTitle(String aboutTitle) {
            this.aboutTitle = aboutTitle;
        }
    }

然后您的第一个 activity 从您将数据传递给另一个 activity 在 listview 项目点击事件中写为:

public class GunungKidul extends AppCompatActivity {

    private ListView listView;
    private ArrayList<Model> models;
    private WisataAdapter wisataAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gunung_kidul);

        listView = (ListView) findViewById(R.id.listwisata1);
        models = ListDetails1.getList();

        wisataAdapter = new WisataAdapter(GunungKidul.this,models);
        listView.setAdapter(wisataAdapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
              Intent intent = new Intent(GunungKidul.this, Pantai_Kesirat.class);
              //To pass whole model data with intent:
             intent.putExtra("MyClassKey", models.get(position));
                startActivity(intent);




            }
        });

    }
}

现在在 Pantai_Kesirat class 你已经制作了一个模型 class 对象如下:

Model model;

然后在您的第二个 Activity 的 onCreate() 方法中,只需从 intent 中接收您的数据,例如:

    // To retrieve object in second Activity
   model =(Model) getIntent().getSerializableExtra("MyClassKey");

然后在模型 class

的 getter 和 setter 方法的帮助下,在您想要的地方使用模型 class 的数据

欢迎使用 Whosebug :)

所以我有一个简单的解决方案来解决您定义的问题,请检查它是否适合您。

  1. 您在 MainActivity(具有 CardView 列表的那个)中实施点击侦听器,例如 "CardClickListener"。
  2. 在为 ListView 启动适配器时传递 this
  3. 在您的适配器中,每次点击 CardItem 时,您都会调用此 clickListener 并将与其关联的数据对象传递给 MainActivity。
  4. 解析您的 MainActivity 中的数据对象,并基于该对象转到您各自的 activity。

虽然此解决方案肯定有效,但我不认为这是解决您问题的最佳方案。一旦你有一些工作,尝试改进它。

希望对您有所帮助!

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

                if(position==0){
                   Intent intent = new Intent(GunungKidul.this, Pantai_Kesirat.class);
                   //To pass whole model data with intent:
                   intent.putExtra("MyClassKey", model);
                   startActivity(intent);
                }
                else if{
                    Intent intent = new Intent(GunungKidul.this,  Goa_Pindul.class);
                    //To pass whole model data with intent:
                    intent.putExtra("MyClassKey", model);
                    startActivity(intent);
                }
        else if{
                    Intent intent = new Intent(GunungKidul.this, Pantai_Baron.class);
                    //To pass whole model data with intent:
                    intent.putExtra("MyClassKey", model);
                    startActivity(intent);
                }
        else if{
                    Intent intent = new Intent(GunungKidul.this, Goa_Jomblang.class);
                    //To pass whole model data with intent:
                    intent.putExtra("MyClassKey", model);
                    startActivity(intent);
                }
        else if{
                    Intent intent = new Intent(GunungKidul.this, AirTerjun.class);
                    //To pass whole model data with intent:
                    intent.putExtra("MyClassKey", model);
                    startActivity(intent);
                }



                            }
                        })

;

使用此代码但请始终记住您的卡片位置或索引值以及单击 cardView 时应打开哪个 activity 如果您单击第一个 cardView 打开 Pantai_Kesirat activity