Необходимо в обработчике нажатия запустить новую активити, изменив view компонеты, которые хранит ее xml представление.
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> {
private static final String TAG = "NewsAdapter";
private static ArrayList<Datum> mDataset;
private static Context context;
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private TextView testTextCV;
private TextView testTextCV2;
private ImageView imageViewCV;
private TextView newsFullTitle;
private TextView newsFullCreatedAt;
private TextView newsFullContent;
private ImageView newsFullImage;
private static Datum newForFullDisplaying;
public ViewHolder(View v) {
super(v);
testTextCV = (TextView) v.findViewById(R.id.testTextCV);
testTextCV2 = (TextView) v.findViewById(R.id.testTextCV2);
imageViewCV = (ImageView) v.findViewById(R.id.imageViewCV);
newsFullTitle = (TextView) v.findViewById(R.id.newsFullTitle);
newsFullCreatedAt = (TextView) v.findViewById(R.id.newsFullCreatedAt);
newsFullContent = (TextView) v.findViewById(R.id.newsFullContent);
newsFullImage = (ImageView) v.findViewById(R.id.newsFullImage);
context = v.getContext();
v.setOnClickListener(this);
}
public TextView getTestTextCV() {
return testTextCV;
}
public TextView getTestTextCV2() {
return testTextCV2;
}
public ImageView getImageCV() {
return imageViewCV;
}
@Override
public void onClick(View v) {
Log.d(TAG, "Element " + getAdapterPosition() + " clicked.");
newsFullTitle.setText("SomeTitle");
newsFullContent.setText("SomeContent");
//etc
Intent intent = new Intent(context, NewsFullScreenActivity.class);
context.startActivity(intent);
}
}
public NewsAdapter(ArrayList<Datum> myDataset) {
this.mDataset = myDataset;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
//Создание нового view
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.one_news_carview, viewGroup, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
Log.d(TAG, "Element " + position + " set.");
//Получение эемента из датасет в этой позиции и замена контента вью
//этим элементом
viewHolder.getTestTextCV().setText(mDataset.get(position).getTitle());
viewHolder.getTestTextCV2().setText(mDataset.get(position).getUpdatedAt());
}
@Override
public int getItemCount() {
return mDataset.size();
}
}
public class NewsFullScreenActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_full_screen);
}
}
При попытке установить значения
newsFullTitle.setText("SomeTitle");
newsFullContent.setText("SomeContent");
вылетает ошибка:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at game.normal.com.normalgame4.news.news.recycler.view.all.NewsAdapter$ViewHolder.onClick(NewsAdapter.java:78)
Очевидно что findViewById возвращает null. Кто-то может подсказать почему вьюхи хранят null если в конструкторе я их нашел?
Вы должны в методе onBindViewHolder реализовывать такие функции как onClick и т.д.
перенесите их туда.
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position) {
Log.d(TAG, "Element " + position + " set.");
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "Element " + getAdapterPosition() + " clicked.");
newsFullTitle.setText("SomeTitle");
newsFullContent.setText("SomeContent");
//etc
Intent intent = new Intent(context, NewsFullScreenActivity.class);
context.startActivity(intent);
}
});
//Получение эемента из датасет в этой позиции и замена контента вью
//этим элементом
viewHolder.getTestTextCV().setText(mDataset.get(position).getTitle());
viewHolder.getTestTextCV2().setText(mDataset.get(position).getUpdatedAt());
}
Продвижение своими сайтами как стратегия роста и независимости