2015-08-03 3 views
3

Хорошо, я знаю, возможно, кто-то уже задал этот вопрос. Я уже нашел возможное решение для своей проблемы на this link. Но по неизвестной причине это решение не работает для меня. Я хочу показать Toast, когда предмет (a CardView) щелкнут внутри RecyclerView. Этот Toast должен показать мне позицию элемента, нажатого. Когда я нажимаю на CardView, я вижу пульсацию, поэтому это означает, что нажимается карта - но, к сожалению, я не вижу тостов. Может кто-нибудь объяснить мне, почему? Заранее спасибо.Нет тоста, если элемент был нажат RecyclerView

Это мой адаптер:

public class MainRecyclerViewAdapter extends RecyclerView.Adapter<MainRecyclerViewAdapter.MyMainViewHolder> { 


private List<Information> mainInfo; 
MyDatabase myDatabase; 


public MainRecyclerViewAdapter(List<Information> mainInfo) { 
    this.mainInfo = mainInfo; 
} 

public static class MyMainViewHolder extends RecyclerView.ViewHolder { 
    TextView titleTextView, notesTextView, dateTextView, timeTextView; 
    ImageView imageView; 
    LinearLayout linearLayout; 

    public MyMainViewHolder(View itemView) { 
     super(itemView); 
     linearLayout = (LinearLayout) itemView.findViewById(R.id.mainLayout); 
     imageView = (ImageView) itemView.findViewById(R.id.imgIcon); 
     titleTextView = (TextView) itemView.findViewById(R.id.title_TextView); 
     notesTextView = (TextView) itemView.findViewById(R.id.notes_TextView); 
     dateTextView = (TextView) itemView.findViewById(R.id.date_TextView); 
     timeTextView = (TextView) itemView.findViewById(R.id.time_TextView); 

     itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(v.getContext(), "Position: " + Integer.toString(getAdapterPosition()), Toast.LENGTH_LONG).show(); 
      } 
     }); 

    } 

} 



@Override 
public MyMainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_single_raw, parent, false); 
    MyMainViewHolder holder = new MyMainViewHolder(v); 
    return holder; 
} 

public void delete(int position){ 
    mainInfo.remove(position); 
    notifyItemRemoved(position); 
} 

@Override 
public void onBindViewHolder(final MyMainViewHolder holder, final int position) { 
    holder.imageView.setImageResource(mainInfo.get(position).getICON_ID()); 
    holder.titleTextView.setText(mainInfo.get(position).getTITLE()); 
    holder.notesTextView.setText(mainInfo.get(position).getNOTES()); 
    holder.dateTextView.setText(mainInfo.get(position).getDATE()); 
    holder.timeTextView.setText(mainInfo.get(position).getTIME()); 


} 




@Override 
public int getItemCount() { 
    return mainInfo.size(); 
}} 

Это файл макета моего cardView:

<android.support.v7.widget.CardView 
xmlns:card_view="http://schemas.android.com/apk/res-auto" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/card_view1" 
android:clickable="true" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
card_view:cardCornerRadius="3dp" 
android:layout_margin="5dp"> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mainLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="0.5dp" 
    android:clickable="true" 
    android:background="?android:selectableItemBackground" 
    android:orientation="horizontal" 
    android:weightSum="10"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 


     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="fill_parent" 
      android:layout_marginLeft="16dp" 
      android:layout_weight="8.5"> 

      <TextView 
       android:id="@+id/title_TextView" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginBottom="5dp" 
       android:layout_marginLeft="0dp" 
       android:layout_marginRight="8dp" 
       android:layout_marginTop="5dp" 
       android:text="Title" 
       android:fontFamily="sans-serif-light" 
       android:textColor="#F57C00" 
       android:textSize="25sp" 
       /> 



     </RelativeLayout> 

     <View 
      android:layout_width="fill_parent" 
      android:id="@+id/divider1" 
      android:layout_height="0.1dp" 
      android:layout_below="@+id/title_TextView" 
      android:background="@android:color/darker_gray"/> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal"> 

      <RelativeLayout 
       android:layout_width="match_parent" 
       android:layout_height="fill_parent" 
       android:layout_marginLeft="16dp" 
       android:layout_weight="8.5"> 

       <ImageView 
        android:id="@+id/imgIcon" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentLeft="true" 
        android:layout_centerHorizontal="true" 
        android:layout_centerVertical="true" 
        android:src="@mipmap/ic_alarm_check_grey600_48dp" /> 


      </RelativeLayout> 


      <LinearLayout 
       android:id="@+id/linear" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_weight="1.5" 
       android:orientation="vertical"> 


       <TextView 
        android:id="@+id/notes_TextView" 
        android:paddingTop="5dp" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginBottom="5dp" 
        android:layout_marginLeft="16dp" 
        android:layout_marginRight="8dp" 
        android:text="notes" 
        android:textColor="#ff565656" 
        android:textSize="12sp" /> 

       <TextView 
        android:id="@+id/date_TextView" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginBottom="5dp" 
        android:layout_marginLeft="16dp" 
        android:layout_marginRight="8dp" 
        android:text="date" 
        android:textColor="#ff565656" 
        android:textSize="12sp" /> 

       <TextView 
        android:id="@+id/time_TextView" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginBottom="5dp" 
        android:layout_marginLeft="16dp" 
        android:layout_marginRight="8dp" 
        android:text="time" 
        android:textColor="#ff565656" 
        android:textSize="12sp" /> 


      </LinearLayout> 


     </LinearLayout> 


    </LinearLayout> 


</LinearLayout> 

+0

у вас есть щелчок слушателя на TextView вы уверены, что вы нажав TextView? – tyczj

+0

Да, я. Можете ли вы предложить мне, как отображать этот тост, когда я нажимаю на элемент? –

ответ

4

Проблема решена! Это рабочий код:

public static class MyMainViewHolder extends RecyclerView.ViewHolder { 
    TextView titleTextView, notesTextView, dateTextView, timeTextView; 
    ImageView imageView; 
    LinearLayout linearLayout; 

    public MyMainViewHolder(final View itemView) { 
     super(itemView); 
     linearLayout = (LinearLayout) itemView.findViewById(R.id.mainLayout); 
     imageView = (ImageView) itemView.findViewById(R.id.imgIcon); 
     titleTextView = (TextView) itemView.findViewById(R.id.title_TextView); 
     notesTextView = (TextView) itemView.findViewById(R.id.notes_TextView); 
     dateTextView = (TextView) itemView.findViewById(R.id.date_TextView); 
     timeTextView = (TextView) itemView.findViewById(R.id.time_TextView); 



     itemView.setClickable(true); 
     itemView.setFocusableInTouchMode(true); 

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

       Toast.makeText(itemView.getContext(), "Position: " + Integer.toString(getAdapterPosition()), Toast.LENGTH_LONG).show(); 
      } 
     }); 

     linearLayout.setOnClickListener(new View.OnClickListener(){ 

      @Override 
      public void onClick(View v) { 

       Toast.makeText(itemView.getContext(), "Position: " + Integer.toString(getAdapterPosition()), Toast.LENGTH_LONG).show(); 
      } 

     }); 

    } 

} 

Так что теперь, если я нажимаю на LinearLayout - так на всю cardView - я вижу свою позицию!

Кредиты: link

1

Добавьте следующую строку в view.xml android:clickable=true

Удалить следующую строку из первого LinearLayout android:clickable="true"

+0

Выполнено, это не сработало ... –

+0

Попробуйте изменить класс 'MyMainViewHolder' на статику, и вам не хватает закрывающего тега в xml-файле и getAdapaterposition return int. Вам нужно будет преобразовать его в строку – Nishant

+0

Ни в коем случае, он не работает ... Я вижу только рябь, не тост –

0
try this, 
@Override 
public MyMainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_single_raw, parent, false); 
    MyMainViewHolder holder = new MyMainViewHolder(v); 
    return holder; 
} 

public void delete(int position){ 
    mainInfo.remove(position); 
    notifyItemRemoved(position); 
} 

    @Override 
    public void onBindViewHolder(final MyMainViewHolder holder, final int position) { 
     holder.imageView.setImageResource(mainInfo.get(position).getICON_ID()); 
     holder.titleTextView.setText(mainInfo.get(position).getTITLE()); 
     holder.notesTextView.setText(mainInfo.get(position).getNOTES()); 
     holder.dateTextView.setText(mainInfo.get(position).getDATE()); 
     holder.timeTextView.setText(mainInfo.get(position).getTIME()); 

      holder.titleTextView.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
        Toast.makeText(context,""+position,Toast.LENGTH_SHORT).show(); 

     } 
     }); 

} 




@Override 
public int getItemCount() { 
    return mainInfo.size(); 
}} 
-1

Обратите внимание в cardview области видимости Clickable верно

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:layout_weight="1" 
    android:gravity="center_vertical|center|center_horizontal" 
    android:layout_height="wrap_content"> 
     <android.support.v7.widget.CardView 
      android:id="@+id/card_view" 
      android:layout_width="match_parent" 
      card_view:contentPadding="10dp" 
      android:layout_height="200dp" 
      android:layout_gravity="center" 
      android:clickable="true" 
      android:transitionGroup="false" 
      android:layout_margin="10dp"> 
      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:id="@+id/select_photo" 
       android:layout_alignParentTop="true" 
       android:layout_gravity="center_horizontal" 
       android:layout_margin="5dp" 
       /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:id="@+id/select_name" 
       android:textSize="25sp" 
       android:textStyle="bold" 
       android:layout_gravity="bottom|center_horizontal" /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:id="@+id/txt_zoom_in" 
      />`enter code here` 

    </android.support.v7.widget.CardView> 
</LinearLayout> 
Смежные вопросы