У меня есть проблема, чтобы называть одну Activity
, с одного ImageButton
что внутри одной CardView
и эта внутри одного RecyclerView
, и RecyclerView
будь внутри tab фрагмента. То, что я попробовал, как в другие случаи он состоит в том, чтобы помещать нечто похожее:
ImageButton
>> cardview
>> recyclerview
>> tab
.
public void callBreakFast(){
imageButton = (ImageButton)findViewById(R.id.imgbt1);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent myIntent = new Intent(ActividadOrigen.this, ActividadDestino.class);
startActivity(myIntent);
}
});
}
Но я не функционирует код.
Мой фрагмент FragEatingTabToday.java
что является tab, который содержит список статей:
public class FragEatingTabToday extends Fragment {
private LinearLayoutManager linearLayout;
private ImageButton imageButton;
public FragEatingTabToday() { }
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmento_yesterday, container, false);
RecyclerView reciclador = (RecyclerView)view.findViewById(R.id.my_recycler_view);
linearLayout = new LinearLayoutManager(getActivity());
reciclador.setLayoutManager(linearLayout);
AdapEatingToday adaptador = new AdapEatingToday(ModelEating.ACTIVIDADES);
reciclador.setAdapter(adaptador);
return view;
}
}
И Ваш соответствующий XML
названный fragmento_yesterday.xml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#eeeeee"
android:clipToPadding="false"
android:paddingBottom="16dp"
android:paddingTop="16dp"
android:scrollbars="vertical" />
</LinearLayout>
Другой сохранил в архиве адаптер AdapEatingToday.java
:
public class AdapEatingToday extends RecyclerView.Adapter<AdapEatingToday.ViewHolder> {
private final List<ModelEating> items;
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView titulo;
public TextView horario;
public ImageButton picture;
public ViewHolder(View v) {
super(v);
titulo = (TextView) v.findViewById(R.id.texto_titulo);
horario = (TextView) v.findViewById(R.id.texto_horario);
picture = (ImageButton) v.findViewById(R.id.imgbt1);
}
}
public AdapEatingToday(List<ModelEating> items) {
this.items = items;
}
@Override
public int getItemCount() {
return items.size();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.item_lista_yesterday, viewGroup, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
ModelEating item = items.get(i);
viewHolder.titulo.setText(item.getActividad());
viewHolder.horario.setText(item.getHora());
}
}
И XML item_lista_yesterday.xml
статей, которые его один CardView
который он содержит TextView
и ImageButton
:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:background="#C5CAE9"
android:foreground="?attr/selectableItemBackground"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:orientation="vertical"
android:padding="8dp"
android:weightSum="1">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="6dp"
android:paddingTop="6dp">
<TextView
android:id="@+id/texto_titulo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|left"
android:layout_marginStart="16dp"
android:text="texto1"
android:textColor="#000000"
android:textSize="16sp" />
<TextView
android:id="@+id/texto_horario"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignTop="@+id/texto_titulo"
android:layout_marginEnd="26dp"
android:layout_marginStart="16dp"
android:ellipsize="end"
android:singleLine="true"
android:text="texto2"
android:textColor="#000000"
android:textSize="16sp" />
</RelativeLayout>
<View
android:id="@+id/linea_divisora1"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginBottom="2dp"
android:layout_marginTop="5dp"
android:background="#bebebe" />
<ImageButton
android:id="@+id/imgbt1"
android:layout_width="100dp"
android:layout_height="60dp"
android:layout_gravity="center"
android:background="@mipmap/bread"
android:clickable="true" />
<View
android:id="@+id/linea_divisora2"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginBottom="2dp"
android:background="#bebebe" />
</LinearLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
Внутри Fragment, чтобы относиться к контексту любой вещи, ты должен использовать что-то как getActivity().getApplicationContext()
, так как, если Фрагмент не активность. Например:
AdapEatingToday adaptador = new AdapEatingToday(getActivity().getApplicationContext(),datos);
данных были бы данными, которых было бы нужно загружать в адаптере, но это боковое в предыдущий комментарий.
В твоем adapter RecyclerView
, ты нуждаешься в том, чтобы поместить что-то как это:
public static class ViewHolder extends RecyclerView.ViewHolder
implements View.OnClickListener {
private String mItem;
private TextView mTextView;
public ViewHolder(View view) {
super(view);
view.setOnClickListener(this);
mTextView = (TextView) view;
}
public void setItem(String item) {
mItem = item;
mTextView.setText(item);
}
@Override
public void onClick(View view) {
Log.d(TAG, "onClick " + getPosition() + " " + mItem);
}
}
Уже не существует onClickItem
или что-то похожее.
Не, потому что сейчас это так сложно, но я, когда я это сделал, я сделал это более или менее таким.
public class Holder extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView imgView;
/// un listener para recuperar un el touch espesifico sobre uno de los items del cardview
// y a cada uno de los views se les agrega el listenre para que escuchen el click
public Holder(View itemView) {
super(itemView);
imgView = (ImageView) itemView.findViewById(R.id.imgGeneral_gab);
imgView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.imgGeneral_gab) {
mListener.onImageClick(v, getPosition());
}
}
}
public interface IMyViewHolderClicks {
void onImageClick(View v, int position);
}
И в adapter RecyclerView. Adapter addListener очевидно.
public void addOnViewsListener(IMyViewHolderClicks listener){
mListener = listener;
}
И в конце концов в Fragment.
AdapEatingToday adaptador = new AdapEatingToday(ModelEating.ACTIVIDADES);
adaptador.addOnViewsListener(new MainAdapter.IMyViewHolderClicks() {
@Override
public void onImageClick(View v, int position) {
// AQUI SUCEDE LA MAGIA
}
});
Протестируй с этим cГіdigo
public class AdapEatingToday extends RecyclerView.Adapter<AdapEatingToday.ViewHolder> {
private final List<ModelEating> items;
public static class ViewHolder extends RecyclerView.ViewHolder {
public TextView titulo;
public TextView horario;
public ImageButton picture;
public ViewHolder(View v) {
super(v);
titulo = (TextView) v.findViewById(R.id.texto_titulo);
horario = (TextView) v.findViewById(R.id.texto_horario);
picture = (ImageButton) v.findViewById(R.id.imgbt1);
}
}
public AdapEatingToday(List<ModelEating> items) {
this.items = items;
}
@Override
public int getItemCount() {
return items.size();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.item_lista_yesterday, viewGroup, false);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//lanzar activity
Intent myIntent = new Intent(ActividadOrigen.this, ActividadDestino.class);
startActivity(myIntent);
}
}
});
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
ModelEating item = items.get(i);
viewHolder.titulo.setText(item.getActividad());
viewHolder.horario.setText(item.getHora());
}
}
Простая форма - добавляя один OnItemClickListener
в Adapter:
Adapter.SetOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(View v , int position) {
Intent myIntent = new Intent(ActividadOrigen.this, ActividadDestino.class);
startActivity(myIntent);
}
});
PodrГ-Схвати tambiГ©n в зависимости от нее posiciГіn элемента в Adapter
, открывать различную активность, например:
Adapter.SetOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(View v , int position) {
Intent myIntent;
switch(position){
case 0:
myIntent = new Intent(ActividadOrigen.this, ActividadDestinoA.class);
break;
case 1:
myIntent = new Intent(ActividadOrigen.this, ActividadDestinoB.class);
break;
case 2:
myIntent = new Intent(ActividadOrigen.this, ActividadDestinoC.class);
break;
}
startActivity(myIntent);
}
});