Обработчик нажатий на строку textview

152
31 декабря 2019, 23:00

Есть фрагмент в котором я подгружаю данные из 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);
        }
    });
Answer 1

в конструкторе viewholder добавьте itemView.setOnClickListener(this). в OnClick(View view) открывайте новую activity. Если не используете идентификаторы, и у вас не изменяются данные, можете передавать в качестве ключа позицию новости, забрав ее через метод getAdapterPosition(). Но лучше, конечно, использовать уникальные идентификаторы. Либо передавайте напрямую новость в новую activity

READ ALSO
Как в Freemarker проверить существования ключа в Map и вывести значения?

Как в Freemarker проверить существования ключа в Map и вывести значения?

Подскажите пожалуйста! Как в Freemarker проверить существования ключа в Map и вывести значения?

140
Два maven проекта в одном

Два maven проекта в одном

У меня есть два отдельных maven проекта data_importer и data_exporterОба проекта собираются в свои отдельные Docker контейнеры

189
Как поправить transition эффект?

Как поправить transition эффект?

Очень нравится выпадающее меню в теме ColorNews (демо сайт)Меню я из этой темы позаимствовал, встроил на свой сайт, однако выяснилась проблема...

190