英文:
I am making an wallpaper app. And I am stuck somewhere
问题
我无法创建一个RecyclerView的OnItemClickListener,以便我可以为所有的壁纸实现点击功能。我已经使用了带有CardView的RecyclerView来加载图片,并且取得了成功。我是一个Android开发和Java方面的初学者。如果有人能帮助我,我会非常高兴。谢谢。
package fragments;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.flauntywalls.R;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.database.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import adapters.CategoriesAdapter;
import models.Category;
public class class_s10 extends Fragment {
private List<Category> categoryList;
private ProgressBar progressBar;
private DatabaseReference dbCategories;
private RecyclerView recyclerView;
private CategoriesAdapter adapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.s10_frag, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
progressBar = view.findViewById(R.id.progress_bar);
progressBar.setVisibility(View.VISIBLE);
recyclerView = view.findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 3));
categoryList = new ArrayList<>();
adapter = new CategoriesAdapter(getActivity(), categoryList);
recyclerView.setAdapter(adapter);
String category="S10";
dbCategories = FirebaseDatabase.getInstance().getReference("images").child(category);
dbCategories.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
progressBar.setVisibility(View.GONE);
for (DataSnapshot ds : dataSnapshot.getChildren()) {
Category w = ds.getValue(Category.class);
categoryList.add(w);
}
adapter.notifyDataSetChanged();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
以下是CategoriesAdapter的代码:
package adapters;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.example.flauntywalls.R;
import com.example.flauntywalls.activities.wallpaper_load;
import java.util.List;
import models.Category;
public class CategoriesAdapter extends RecyclerView.Adapter<CategoriesAdapter.ImageViewHolder> {
private Context mCtx;
private List<Category> imageslist;
public CategoriesAdapter(Context mCtx, List<Category> imageslist) {
this.mCtx = mCtx;
this.imageslist = imageslist;
}
@NonNull
@Override
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mCtx).inflate(R.layout.recyclerview_images, parent, false);
return new ImageViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) {
Category images = imageslist.get(position);
Glide.with(mCtx).load(images.url).into(holder.imageView);
}
@Override
public int getItemCount() {
return imageslist.size();
}
class ImageViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
public ImageViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.image_view);
}
}
}
英文:
I am not able to create a recyclerview.OnItemClickListener so that I can implement clicks for all the wallpapers. I have used recycler view with cardview for loading the images and it has been successful. I am a beginner in android development and also in Java. I would be very happy if someone can help me with it. Thank you.
package fragments;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.flauntywalls.R;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.database.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import adapters.CategoriesAdapter;
import models.Category;
/**
* Created by Belal on 4/20/2018.
*/
public class class_s10 extends Fragment {
private List<Category> categoryList;
private ProgressBar progressBar;
private DatabaseReference dbCategories;
private RecyclerView recyclerView;
private CategoriesAdapter adapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.s10_frag, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
progressBar = view.findViewById(R.id.progress_bar);
progressBar.setVisibility(View.VISIBLE);
recyclerView = view.findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 3));
categoryList = new ArrayList<>();
adapter = new CategoriesAdapter(getActivity(), categoryList);
recyclerView.setAdapter(adapter);
String category="S10";
dbCategories = FirebaseDatabase.getInstance().getReference("images").child(category);
dbCategories.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
progressBar.setVisibility(View.GONE);
for (DataSnapshot ds : dataSnapshot.getChildren()) {
Category w= ds.getValue(Category.class);
categoryList.add(w);
}
adapter.notifyDataSetChanged();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
Below is the code for CategoriesAdapter:
package adapters;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.example.flauntywalls.R;
import com.example.flauntywalls.activities.wallpaper_load;
import java.util.List;
import models.Category;
public class CategoriesAdapter extends RecyclerView.Adapter<CategoriesAdapter.ImageViewHolder> {
private Context mCtx;
private List<Category> imageslist;
public CategoriesAdapter(Context mCtx, List<Category> imageslist) {
this.mCtx = mCtx;
this.imageslist = imageslist;
}
@NonNull
@Override
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(mCtx).inflate(R.layout.recyclerview_images,parent,false);
return new ImageViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) {
Category images=imageslist.get(position);
Glide.with(mCtx).load(images.url).into(holder.imageView);
}
@Override
public int getItemCount() {
return imageslist.size();
}
class ImageViewHolder extends RecyclerView.ViewHolder{
ImageView imageView;
public ImageViewHolder(@NonNull View itemView) {
super(itemView);
imageView=itemView.findViewById(R.id.image_view);
}
}
}
答案1
得分: 0
我建议在使用点击监听器时使用ListView,但如果你需要使用RecyclerView或者ListView,你必须使用OnItemClickListener,例如:
recycleview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 例如执行某些操作,比如跳转到另一个活动
Intent intent = new Intent(Activity.this, secondActivity.class);
startActivity(intent);
}
});
如果上述内容有错误,请告诉我,并提供你的LogCat日志!
英文:
I recommend using a listview when using click listeners but if you need a recycle view or a listview you must use OnItemClickListener for ex:
recycleview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Any action for example going to another activity
Intent intent = new Intent(Activity.this,secondActivity.class);
startActivity(intent);
}
});
If there is an error in the above just tell me,and post your logcat!
专注分享java语言的经验与见解,让所有开发者获益!
评论