Здравствуйте уважаемые форумчане!
Столкнулся с такой проблемой, в RecyclerView создаю адаптер для добавления карточек, в карточке, в левом верхнем углу находится картинка, при нажатии на которую карточка увеличивается в размерах и в ней меняется FrameLayout.
Вот все исходники:
Код:
public class CardMenu {
int mImage;
String mName;
String mAmount;
String mData;
String mTime;
String mAdd;
String mDel;
CardMenu(int image, String name, String amount, String data, String time, String add, String del) {
mImage = image;
mName = name;
mAmount = amount;
mData = data;
mTime = time;
mAdd = add;
mDel = del;
}
}
Код:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initializeData();
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view_menu);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new RecyclerAdapter(card_menu);
mRecyclerView.setAdapter(mAdapter);
}
}
[/JAVA]
[JAVA]
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
List<CardMenu> card_menu;
Scene scene1;
Scene scene2;
ViewGroup parent;
ViewGroup view_scene1;
ViewGroup view_scene2;
public static class ViewHolder extends RecyclerView.ViewHolder {
CardView cv;
public ImageView imageView;
public TextView mName;
public TextView mAmount;
public TextView mData;
public TextView mTime;
public TextView mAdd;
public TextView mDel;
public ViewHolder(View v) {
super(v);
InitializeScene1(v);
}
void InitializeScene1(View v) {
cv = (CardView) v.findViewById(R.id.card_view);
imageView = (ImageView) v.findViewById(R.id.image_view);
mName = (TextView) v.findViewById(R.id.name);
mAmount = (TextView) v.findViewById(R.id.amount);
mAdd = (TextView) v.findViewById(R.id.add);
mDel = (TextView) v.findViewById(R.id.del);
}
void InitializeScene2(View v) {
cv = (CardView) v.findViewById(R.id.card_view);
imageView = (ImageView) v.findViewById(R.id.image_view);
mName = (TextView) v.findViewById(R.id.name);
mAmount = (TextView) v.findViewById(R.id.amount);
mData = (TextView) v.findViewById(R.id.data);
mTime = (TextView) v.findViewById(R.id.time);
mAdd = (TextView) v.findViewById(R.id.add);
mDel = (TextView) v.findViewById(R.id.del);
}
}
public RecyclerAdapter(List<CardMenu> card_menu) {
this.card_menu = card_menu;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.d("my", "onCreateViewHolder");
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_view_menu_item, parent, false);
this.parent = parent;
scene1 = Scene.getSceneForLayout(parent, R.layout.scene1, parent.getContext());
scene2 = Scene.getSceneForLayout(parent, R.layout.scene2, parent.getContext());
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
Log.d("my", "onBindViewHolder");
Log.d("my", "position = " + position);
holder.imageView.setImageResource(card_menu.get(position).mImage);
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("my", "onClick!");
TransitionSet set = new TransitionSet();
set.addTransition(new Fade());
set.addTransition(new ChangeBounds());
set.setOrdering(TransitionSet.ORDERING_TOGETHER);
set.setDuration(500);
set.setInterpolator(new AccelerateInterpolator());
TransitionManager.go(scene2, set);
Log.d("my", "endClick!");
View v = LayoutInflater.from(scene2.getSceneRoot().getContext())
.inflate(R.layout.recycler_view_menu_item, scene2.getSceneRoot(), false);
holder.InitializeScene2(v);
holder.imageView.setImageResource(card_menu.get(position).mImage);
holder.mName.setText(card_menu.get(position).mName);
holder.mAmount.setText(card_menu.get(position).mAmount);
holder.mData.setText(card_menu.get(position).mData);
holder.mTime.setText(card_menu.get(position).mTime);
holder.mAdd.setText(card_menu.get(position).mAdd);
holder.mDel.setText(card_menu.get(position).mDel);
}
});
holder.mName.setText(card_menu.get(position).mName);
holder.mAmount.setText(card_menu.get(position).mAmount);
holder.mAdd.setText(card_menu.get(position).mAdd);
holder.mDel.setText(card_menu.get(position).mDel);
}
@Override
public int getItemCount() {
return card_menu.size();
}
public Scene getScene1() {
return scene1;
}
public Scene getScene2() {
return scene2;
}
}
Ошибка происходит в функции:
Код:
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("my", "onClick!");
TransitionSet set = new TransitionSet();
set.addTransition(new Fade());
set.addTransition(new ChangeBounds());
set.setOrdering(TransitionSet.ORDERING_TOGETHER);
set.setDuration(500);
set.setInterpolator(new AccelerateInterpolator());
TransitionManager.go(scene2, set);
Log.d("my", "endClick!");
View v = LayoutInflater.from(scene2.getSceneRoot().getContext())
.inflate(R.layout.recycler_view_menu_item, scene2.getSceneRoot(), false);
holder.InitializeScene2(v);
holder.imageView.setImageResource(card_menu.get(position).mImage);
holder.mName.setText(card_menu.get(position).mName);
holder.mAmount.setText(card_menu.get(position).mAmount);
holder.mData.setText(card_menu.get(position).mData);
holder.mTime.setText(card_menu.get(position).mTime);
holder.mAdd.setText(card_menu.get(position).mAdd);
holder.mDel.setText(card_menu.get(position).mDel);
}
});
Ошибка:
Код:
Process: com.example.max.recyclerviewmenu, PID: 10574
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.v7.widget.RecyclerView$ViewHolder.shouldIgnore()' on a null object reference
Уважаемые гуру программирования под Android, прошу помочь, а то мне нужно скоро вставить этот код в проект, а он не работает.