Есть фрагмент в котором я подгружаю данные из firebase. Родительский каталог называется "News" У него есть "ребёнок" news1, news2, newsn.. В них содержаться: imageURL(Картинка новости), news_header(Заголовок новости), newsdate(Дата новости) а так же ребёнок news_main(Главная новость) В нём содержится imageURL и news_text. Мне нужно чтобы при нажатии на новость открывалось новое активити и в нём подгружалась инфа об этой новости. То есть news_main. Я не использую уникальный ключ. Заголовок новости и т.д. грузится в recyclerview. Может кто сталкивался с таким. Как быть?
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.MyViewHolder> {
Context context;
ArrayList<News> news;
public NewsAdapter(Context c, ArrayList<News> n)
{
context = c;
news = n;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.news_view, viewGroup, false));
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
myViewHolder.news_date.setText(news.get(i).getDatenews());
myViewHolder.news_header.setText(news.get(i).getHeader_news());
Picasso.get().load(news.get(i).getImageURL()).into(myViewHolder.news_picture);
}
@Override
public int getItemCount() {
return news.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView news_date, news_header;
ImageView news_picture;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
news_date = (TextView) itemView.findViewById(R.id.news_date);
news_header = (TextView) itemView.findViewById(R.id.news_header);
news_picture = (ImageView) itemView.findViewById(R.id.news_picture);
}
}
}
public class NewsActivity extends AppCompatActivity {
String idnews;
TextView main_news;
DatabaseReference reference;
TextView news_date;
RecyclerView recyclerView;
Intent intent;
ArrayList<News> Nlist;
NewsAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news);
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
linearLayoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(linearLayoutManager);
intent = getIntent();
idnews = intent.getStringExtra("idnews");
reference = FirebaseDatabase.getInstance().getReference("News").child(idnews);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
// for (DataSnapshot snapshot : dataSnapshot.getChildren()){
News news = dataSnapshot.getValue(News.class);
// news_date.setText(news.getDatenews());
main_news.setText(news.getNews_main());
Nlist.add(news);
// }
adapter = new NewsAdapter(getApplicationContext(), Nlist);
recyclerView.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(NewsActivity.this, "Что то не так", Toast.LENGTH_SHORT).show();
}
});
}
}
Код передачи id:
myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Mcontext, NewsActivity.class);
intent.putExtra("idnews", news.getIdnews());
Mcontext.startActivity(intent);
}
});
в конструкторе viewholder
добавьте itemView.setOnClickListener(this)
.
в OnClick(View view)
открывайте новую activity
.
Если не используете идентификаторы, и у вас не изменяются данные, можете передавать в качестве ключа позицию новости, забрав ее через метод getAdapterPosition()
. Но лучше, конечно, использовать уникальные идентификаторы.
Либо передавайте напрямую новость в новую activity
Виртуальный выделенный сервер (VDS) становится отличным выбором
Подскажите пожалуйста! Как в Freemarker проверить существования ключа в Map и вывести значения?
У меня есть два отдельных maven проекта data_importer и data_exporterОба проекта собираются в свои отдельные Docker контейнеры
Очень нравится выпадающее меню в теме ColorNews (демо сайт)Меню я из этой темы позаимствовал, встроил на свой сайт, однако выяснилась проблема...