Java 在Android中使用listview显示大量数据并使用parcelable传递
因此,今天我正在使用listview创建一个项目,但我想用android java中的parcelable传递所有选定的值。但我有点困惑,因为我使用数组来存储数据。下面是我的MainActivity.java看起来像:Java 在Android中使用listview显示大量数据并使用parcelable传递,java,android,android-intent,android-listview,parcelable,Java,Android,Android Intent,Android Listview,Parcelable,因此,今天我正在使用listview创建一个项目,但我想用android java中的parcelable传递所有选定的值。但我有点困惑,因为我使用数组来存储数据。下面是我的MainActivity.java看起来像: package com.example.lee; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import
package com.example.lee;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import java.util.ArrayList;
import static android.provider.Contacts.SettingsColumns.KEY;
public class MainActivity extends AppCompatActivity{
ListView list;
String[] title;
int[] image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image = new int[]{R.drawable.poster_a_star, R.drawable.poster_aquaman, R.drawable.poster_avengerinfinity, R.drawable.poster_birdbox,
R.drawable.poster_bohemian};
title = new String[]{"A Star is Born", "Aquaman", "Avengers Infinity War", "Bird Box", "Bohemian Rhapsody"};
ListViewAdapters adapters = new ListViewAdapters(MainActivity.this, image, title, release_info, languages, genres);
list = (ListView)findViewById(R.id.listview_movie);
// Binds the Adapter to the ListView
list.setAdapter(adapters);
// Capture ListView item click
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
ArrayList<Movie> movies = new ArrayList<>();
Movie movie = new Movie();
Intent i = new Intent(MainActivity.this, ObjectReceived.class);
i.putExtra("title",title);
// Pass listview item click position
i.putExtra("position", position);
//Pass image item click image
i.putExtra("image", image);
// Open SingleItemView.java Activity
startActivity(i);
}
});
}
}
列表视图已成功显示,但每当我单击其中一个项目时,应用程序将直接停止运行。我认为这是因为我没有正确地将值从MainActivity.java传递到ObjectReceived.java,但在这里我混淆了如何使用数组项传递值。请帮助我:D谢谢你在你的onItemClick中,你正在意向包中添加3个值:
i.putExtra("title",title);
i.putExtra("position", position);
i.putExtra("image", image);
在yout ObjectReceived活动中,您需要通过其键获取每个值
所以这不起作用:
ArrayList<Movie> movies = getIntent().getParcelableArrayListExtra(EXTRA_MOVIE);
}
放置在意向附加中的信息具有类型,您需要使用此类型信息在检索活动中从附加中检索正确的值。参考此答案
在发送活动中:
Intent i = new Intent(MainActivity.this, ObjectReceived.class);
ArrayList<Movie> movieArray = new ArrayList<Movie>();
i.putParcelableArrayListExtra("array", movieArray);
i.putExtra("title",title);
i.putExtra("position", position);
i.putExtra("image", image);
startActivity(i);
Intent i=新的Intent(MainActivity.this、ObjectReceived.class);
ArrayList movieArray=新的ArrayList();
i、 putParcelableArrayListExtra(“阵列”,电影阵列);
i、 putExtra(“标题”,标题);
i、 putExtra(“位置”,位置);
i、 putExtra(“图像”,图像);
星触觉(i);
在接收活动中:
ArrayList<Movie> movieArray = this.getIntent().getParcelableArrayListExtra("array");
List<Movie> movieList = new ArrayList<>();
Intent intent = getIntent();
if (intent != null) {
movieList = intent.getParcelableArrayListExtra("MovieList");
Movie movie = movieList.get(0);
int image = movie.getImage();
String title = movie.getTitle();
}
ArrayList movieArray=this.getIntent().getParcelableArrayListExtra(“数组”);
因此您只想从listview中传递选定的项目数据
您可以简单地执行以下操作
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent i = new Intent(MainActivity.this, ObjectReceived.class);
String movieTitle = title[position]; // selected item title
int movieImage = image[position]; // selected item image
i.putExtra("title",movieTitle);
i.putExtra("position", position);
i.putExtra("image", movieImage);
startActivity(i);
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_object_received);
TextView tvObject = findViewById(R.id.object_received);
// get your data like below.
String title = getIntent().getStringExtra("title");
int image = getIntent().getIntExtra("image");
int position = getIntent().getIntExtra("position");
Log.d("YOUR_TAG", "Title: "+title);
// create movie object like below
Movie movie = new Movie()
movie.setTitle(title);
movie.setImage(image);
//........
}
- 如果您想使用
传递Intent
,那么这个可能会对您有所帮助ArrayList
- 您希望使用下面的代码将数据从一个活动传递到另一个活动
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(context, YourActivity.class); Bundle args = new Bundle(); args.putSerializable("name",list); intent.putExtra("namelist",args); context.startActivity(intent);
- 在要获取意图的活动中,请使用下面的代码
ArrayList<YourModelName> arraylistname = new ArrayList<>(); Intent intent1 = getIntent(); Bundle bundle1 = intent1.getBundleExtra("namelist"); arraylistname = (ArrayList<YourModelName>) bundle1.getSerializable("name");
ArrayList arraylistname=new ArrayList(); Intent intent1=getIntent(); Bundle bundle1=intent1.getBundleExtra(“名称列表”); arraylistname=(ArrayList) bundle1.getSerializable(“名称”);
- 并使用
Serializable
ArrayList<Movie> movies = new ArrayList<>();
Movie movie = new Movie();
movie.setTitle(title[position]);
movie.setImages(image[position]);
movies.add(movie);
Intent i = new Intent(MainActivity.this, ObjectReceived.class);
i.putParcelableArrayListExtra("MovieList", (ArrayList<? extends Parcelable>) movies);
ArrayList movies=new ArrayList();
电影=新电影();
电影片名(片名[位置]);
movie.setImages(图像[位置]);
添加(电影);
意图i=新意图(MainActivity.this、ObjectReceived.class);
i、 putParcelableArrayListExtra(“MovieList”),(ArrayList好的,谢谢你们帮助我!现在我的代码运行良好!我尝试了这个
String mTitle= screenplays[position];
intmImage= overview[position];
i.putExtra("title",mTitle);
// Pass all data title
i.putExtra("image", mImage);
// Pass all data image
这是用来接收值的
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_object_received);
TextView tvObject = findViewById(R.id.object_received);
tvObject.setText(getIntent().getStringExtra("title"));
}
但是这个没有实现POJO类Post错误消息我已经发布了错误@sravsy您没有将数组添加到setOnItemClickListenter@Leony您想使用intent通过arraylist吗?请查看此链接,它将帮助您:我确实尝试了您的答案,但当我单击存储在数组中的某个数据时,它并不是string、 xml,第二个活动没有收到任何数据,完全为空
ArrayList<Movie> movies = new ArrayList<>();
Movie movie = new Movie();
movie.setTitle(title[position]);
movie.setImages(image[position]);
movies.add(movie);
Intent i = new Intent(MainActivity.this, ObjectReceived.class);
i.putParcelableArrayListExtra("MovieList", (ArrayList<? extends Parcelable>) movies);
List<Movie> movieList = new ArrayList<>();
Intent intent = getIntent();
if (intent != null) {
movieList = intent.getParcelableArrayListExtra("MovieList");
Movie movie = movieList.get(0);
int image = movie.getImage();
String title = movie.getTitle();
}
String mTitle= screenplays[position];
intmImage= overview[position];
i.putExtra("title",mTitle);
// Pass all data title
i.putExtra("image", mImage);
// Pass all data image
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_object_received);
TextView tvObject = findViewById(R.id.object_received);
tvObject.setText(getIntent().getStringExtra("title"));
}