使用 CardView BaseAdapter OnItemClick 自定义 ListView
Custom ListView using CardView BaseAdapter OnItemClick
我真的需要帮助和一些解决方案
我尝试使用 CardView
和 BaseAdapter
制作自定义 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 :)
所以我有一个简单的解决方案来解决您定义的问题,请检查它是否适合您。
- 您在 MainActivity(具有 CardView 列表的那个)中实施点击侦听器,例如 "CardClickListener"。
- 在为 ListView 启动适配器时传递 this。
- 在您的适配器中,每次点击 CardItem 时,您都会调用此 clickListener 并将与其关联的数据对象传递给 MainActivity。
- 解析您的 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
我真的需要帮助和一些解决方案
我尝试使用 CardView
和 BaseAdapter
制作自定义 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 :)
所以我有一个简单的解决方案来解决您定义的问题,请检查它是否适合您。
- 您在 MainActivity(具有 CardView 列表的那个)中实施点击侦听器,例如 "CardClickListener"。
- 在为 ListView 启动适配器时传递 this。
- 在您的适配器中,每次点击 CardItem 时,您都会调用此 clickListener 并将与其关联的数据对象传递给 MainActivity。
- 解析您的 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