Вызов активности из ViewHolder в RecyclerView?



У меня есть RecyclerView, который загружает содержимое моих строковых массивов, который работает нормально, однако я хочу открыть новую активность в зависимости от того, какой вид они нажали.



То, что я сделал, - это создал массив, называемый классами, так:



<array name="classes">
<item>ClassOne</item>
<item>ClassTwo</item>
<item>ClassThree</item>
<item>ClassFour</item>
</array>


Они хранятся в массиве и передаются в мой адаптер MainActivityList ниже:



String[] classes = resource.getStringArray(R.array.classes);
MainActivityList adapter = new MainActivityList(titles,content, images, classes);
recyclerView.setAdapter(adapter);


Мне удалось добавить OnClickListener к ViewHolder и вывести, какой класс присваивается каждому представлению журнала, Однако я не может понять или начать работать, как запустить другую деятельность.



Имя класса будет что-то вроде ClassOne.класс, например



public class MainActivityList extends RecyclerView.Adapter<MainActivityList.ViewHolder>  {
private String[] mTitles;
private String[] mContent;
private String[] mClasses;
private TypedArray mImages;
private Context context;

public MainActivityList(String[] titles, String[] content, TypedArray images, String[] classes) {
this.mTitles = titles;
this.mContent = content;
this.mImages = images;
this.mClasses = classes;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup,int i) {
final View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.activity_main_card, viewGroup, false);
ViewHolder vh = new ViewHolder(v);

v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

ViewHolder vh = (ViewHolder)v.getTag();
Log.v("DEBUG", "Clicked" + vh.classes);
}
});
return vh;
}

public void onBindViewHolder(ViewHolder holder, int position) {
holder.titleView.setText(mTitles[position]);
holder.contentView.setText(mContent[position]);
holder.imageView.setImageDrawable(mImages.getDrawable(position));
holder.classes = mClasses[position];
}

public class ViewHolder extends RecyclerView.ViewHolder {
public TextView titleView;
public TextView contentView;
public ImageView imageView;
public String classes;

public ViewHolder(View v) {
super(v);
titleView = (TextView) v.findViewById(R.id.card_title);
contentView = (TextView) v.findViewById(R.id.card_content);
imageView = (ImageView)v.findViewById(R.id.card_image);
v.setTag(this);
}
}

@Override
public int getItemCount() {
return mTitles.length;
}

}
578   2  

2 ответов:

Я также искал решение, и я нашел этот пост: http://venomvendor.blogspot.sg/2014/07/setting-onitemclicklistener-for-recycler-view.html

Используя интерфейс OnItemClickListener, вы должны иметь возможность вызывать startActivity в своей деятельности.

adapter.SetOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(View v , int position) {
        // This is in an Activity so should be able to start new activity, etc.


    }
});

Обновление: я протестировал, метод, упомянутый в блоге, сработал для меня.

Intent intent = new Intent(viewObject.getContext(),ActivityName.class);
viewObject.getContext().startActivity(intent);

Comments

    Ничего не найдено.