Java I';我很困惑,我的ListView没有';转移到其他活动时无法工作
我使用互联网上的许多参考资料编写了这段代码,但我不知道为什么我的Java I';我很困惑,我的ListView没有';转移到其他活动时无法工作,java,android,android-intent,Java,Android,Android Intent,我使用互联网上的许多参考资料编写了这段代码,但我不知道为什么我的ListView在转到其他活动时不起作用。有人能帮我找出代码中的问题吗 这是更新的main活动,我使用Parcelable将数据移动到detailActivity public class detailActivity extends AppCompatActivity { public static final String EXTRA_MOVIE = "extra_movie"; private TextVie
ListView
在转到其他活动时不起作用。有人能帮我找出代码中的问题吗
这是更新的main活动
,我使用Parcelable
将数据移动到detailActivity
public class detailActivity extends AppCompatActivity {
public static final String EXTRA_MOVIE = "extra_movie";
private TextView tvJudul, tvDurasi, tvGenre,
tvRilis, tvRate, tvRatecount, tvShortdesc, tvSinopsis;
private ImageView ivPoster;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
tvJudul = findViewById(R.id.tvDetailJudul);
tvDurasi = findViewById(R.id.tvDetailDurasi);
tvGenre = findViewById(R.id.tvDetailGenre);
tvRilis = findViewById(R.id.tvDetailRilis);
tvRate = findViewById(R.id.tvDetailRate);
tvRatecount = findViewById(R.id.tvDetailRateCount);
tvShortdesc = findViewById(R.id.tvDetailShortDesc);
tvSinopsis = findViewById(R.id.tvDetailSinopsis);
ivPoster = findViewById(R.id.ivDetailPoster);
Movie movie = getIntent().getParcelableExtra(EXTRA_MOVIE);
tvJudul.setText(movie.getJudul());
tvDurasi.setText(movie.getDurasi());
tvGenre.setText(movie.getGenre());
tvRilis.setText(movie.getRilis());
tvRate.setText(movie.getRate());
tvRatecount.setText(movie.getRatecount());
tvShortdesc.setText(movie.getShortdesc());
tvSinopsis.setText(movie.getSinopsis());
}
}
这是我的detailActivity
。在这个类中,我使用Parcelable
从main活动
获取数据
public class detailActivity extends AppCompatActivity {
public static final String EXTRA_MOVIE = "extra_movie";
String dtJudul, dtDurasi, dtGenre, dtRilis,
dtRate, dtRateCount, dtShortDesc, dtSinopsis, dtPoster;
ViewHolder holder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
Movie movie = getIntent().getParcelableExtra(EXTRA_MOVIE);
holder.tvJudul.setText(movie.getJudul());
holder.tvDurasi.setText(movie.getDurasi());
holder.tvGenre.setText(movie.getGenre());
holder.tvRilis.setText(movie.getRilis());
holder.tvRate.setText(movie.getRate());
holder.tvRatecount.setText(movie.getRatecount());
holder.tvShortdesc.setText(movie.getShortdesc());
holder.tvSinopsis.setText(movie.getSinopsis());
}
static class ViewHolder{
private TextView tvJudul, tvDurasi, tvGenre,
tvRilis, tvRate, tvRatecount, tvShortdesc, tvSinopsis;
private ImageView ivPoster;
void ViewHolder(View view){
tvJudul = view.findViewById(R.id.tvDetailJudul);
tvDurasi = view.findViewById(R.id.tvDetailDurasi);
tvGenre = view.findViewById(R.id.tvDetailGenre);
tvRilis = view.findViewById(R.id.tvDetailRilis);
tvRate = view.findViewById(R.id.tvDetailRate);
tvRatecount = view.findViewById(R.id.tvDetailRateCount);
tvShortdesc = view.findViewById(R.id.tvDetailShortDesc);
tvSinopsis = view.findViewById(R.id.tvDetailSinopsis);
ivPoster = view.findViewById(R.id.ivDetailPoster);
}
}
}
这是MovieAdapter
public class MovieAdapter extends BaseAdapter {
//private final Context context;
private ArrayList<Movie> listMovie;
private LayoutInflater layoutInflater;
public MovieAdapter(Context context, ArrayList<Movie> listMovie){
this.listMovie = listMovie;
layoutInflater = LayoutInflater.from(context);
}
public void setMovies(ArrayList<Movie> movies ) {
this.listMovie = movies;
}
@Override
public int getCount() {
return listMovie.size();
}
@Override
public Object getItem(int position) {
return listMovie.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
ViewHolder holder;
if(view == null){
view = layoutInflater.inflate(R.layout.item_movie, null);
holder = new ViewHolder();
holder.ViewHolder(view);
view.setTag(holder);
}
else {
holder = (ViewHolder) view.getTag();
}
Glide.with(viewGroup.getContext())
.load(listMovie.get(position).getPoster())
.apply(new RequestOptions().centerCrop())
.into(holder.ivPoster);
holder.tvJudul.setText(listMovie.get(position).getJudul());
holder.tvDurasi.setText(listMovie.get(position).getDurasi());
holder.tvGenre.setText(listMovie.get(position).getGenre());
holder.tvRilis.setText(listMovie.get(position).getRilis());
holder.tvRate.setText(listMovie.get(position).getRate());
holder.tvRatecount.setText(listMovie.get(position).getRatecount());
holder.tvShortdesc.setText(listMovie.get(position).getShortdesc());
return view;
}
static class ViewHolder {
private TextView tvJudul, tvDurasi, tvGenre,
tvRilis, tvRate, tvRatecount, tvShortdesc, tvSinopsis;
private ImageView ivPoster;
void ViewHolder(View view){
tvJudul = view.findViewById(R.id.tvItemJudul);
tvDurasi = view.findViewById(R.id.tvItemDurasi);
tvGenre = view.findViewById(R.id.tvItemGenre);
tvRilis = view.findViewById(R.id.tvItemRilis);
tvRate = view.findViewById(R.id.tvItemRate);
tvRatecount = view.findViewById(R.id.tvItemRateCount);
tvShortdesc = view.findViewById(R.id.tvItemShortDesc);
ivPoster = view.findViewById(R.id.ivPItemPoster);
}
}
}
非常感谢您的回复。仅通过查看此代码,它不应该工作。若detailActivity活动启动,它将立即与NPE一起崩溃,因为holder变量未在任何地方初始化。没有任何代码可以调用ViewHolder(视图)构造函数 Java没有未初始化的变量。没有显式初始值设定项的类和对象的字段以及数组元素将自动使用其类型的默认值初始化(布尔值为false,所有数值类型为0,所有引用类型为null)
要么您没有显示整个代码,要么这不应该工作。它到底是如何不工作的?它会崩溃吗?只是没有打开
detailActivity
?还有什么?当我单击listview上的项目时,什么也没有发生。在logcat中有这样的信息,我不知道这意味着D/ViewRootImpl@82b704[MainActivity]:ViewPostIme指针0 D/ViewRootImpl@82b704[MainActivity]:ViewPostIme指针1 D/AbsListView:onTouchUp()mTouchMode:0您再次发布了detailActivity
。总之,如果单击MainActivity
中的列表项时什么也没有发生,我首先要检查的是您在MovieAdapter
中使用的布局。默认情况下,某些视图
将阻止侦听器
启动。正如Oleg Gryb在下面提到的,如果detailActivity
实际打开,它应该会因为NullPointerException
,以及给定的代码而崩溃。我已经更新了MovieAdapter,我指的是布局,item\u movie.xml
。请研究一下如何组合一个。当你组装了一个变量后,你会确切地知道问题中需要包含什么,以及可以省略什么。我只想声明这个变量,我应该如何处理代码你需要学习Java基础知识,例如如何调用构造函数。在您的例子中,应该有这样的代码:holder=newviewholder(view),其中view是包含您想要显示的所有其他UI控件的代码。还有一件事——你没有解释“不起作用”是什么意思,这就是为什么人们反对投票。可能还有其他问题阻止活动开始。为什么不使用Log.d来检查是否进入了onItemClick?我更新了MainActivity,但它仍然有类似这样的错误。。。在Logcat D中/ViewRootImpl@82b704[MainActivity]:ViewPostIme指针0 D/ViewRootImpl@82b704[MainActivity]:ViewPostIme指针1 D/AbsListView:onTouchUp()mTouchMode:0将Log.D放入onItemClick,查看是否调用了此指针。将Log.d置于onCreate in detailActivity以确定活动是否启动问题完成后,我尝试将侦听器函数移动到MovieAdapter。非常感谢。
D/ViewRootImpl@82b704[MainActivity]: ViewPostIme pointer 0
D/ViewRootImpl@82b704[MainActivity]: ViewPostIme pointer 1
D/AbsListView: onTouchUp() mTouchMode : 0