2016-09-28 143 views
0

我在我的适配器下面的代码在recyclerview:为什么我的onClicklistener无法访问?

public class MyMovieAdapter extends RecyclerView.Adapter<MyMovieAdapter.ViewHolder> { 

    private Context context; 
    Cursor dataCursor; 

    public MyMovieAdapter(Context context, Cursor cursor,) { 
     this.context = context; 
     this.dataCursor = cursor; 

    } 

    @Override 
    public MyMovieAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.my_movies_listrow, viewGroup, false); 

     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder viewHolder, int i) { 

     dataCursor.moveToPosition(i); 
     viewHolder.my_movie_delete_button.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       Log.e("AAAA", "It doesn't print that log on a button click"); 
      } 
     }); 

     viewHolder.tv_original_title.setText(dataCursor.getString(1)); 
     Picasso.with(context).load(dataCursor.getString(9)).resize(150,225).into(viewHolder.img_my_movie); 

    } 

    @Override 
    public int getItemCount() { 
     return dataCursor.getCount(); 
    } 



    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
     TextView tv_original_title; 
     ImageView img_my_movie; 
     Button my_movie_delete_button; 

     public ViewHolder(View view) { 
      super(view); 


      tv_original_title = (TextView)view.findViewById(R.id.tv_original_title); 
      img_my_movie = (ImageView)view.findViewById(R.id.img_my_movie); 
      my_movie_delete_button = (Button)view.findViewById(R.id.my_movies_delete_button); 
      my_movie_delete_button.setOnClickListener(this); 

     } 

     @Override 
     public void onClick(View view) { 
      Log.e("AAAA", "Neither like that"); 

     } 
    } 
    public Cursor swapCursor(Cursor cursor) { 
     if (dataCursor == cursor) { 
      return null; 
     } 
     Cursor oldCursor = dataCursor; 
     this.dataCursor = cursor; 
     if (cursor != null) { 
      this.notifyDataSetChanged(); 
     } 
     return oldCursor; 
    } 
} 

而且我对我的列表的列布局看起来像这样:

<?xml version="1.0" encoding="utf-8"?> 
<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:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="5dp" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="5dp" 
    card_view:cardCornerRadius="5dp"> 

    <RelativeLayout 
     android:layout_marginLeft="20dp" 
     android:layout_marginTop="20dp" 
     android:layout_marginBottom="20dp" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <ImageView 
      android:layout_width="150dp" 
      android:layout_height="225dp" 
      android:id="@+id/img_my_movie" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:layout_marginRight="20dp"/> 

     <TextView 
      android:layout_marginTop="10dp" 
      android:textSize="18sp" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/tv_original_title" 
      android:textStyle="bold" 
      android:layout_centerVertical="true" 
      android:layout_toRightOf="@+id/img_my_movie" /> 

     <Button 
      android:id="@+id/my_movies_delete_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="delete" 
      android:layout_alignBaseline="@+id/tv_original_title" 
      android:layout_alignBottom="@+id/tv_original_title" 
      android:layout_centerHorizontal="true" /> 

    </RelativeLayout> 

</android.support.v7.widget.CardView> 

我已经尝试打印日志上按钮点击两种不同的方式,你可以看到上面,没有运气。可能是什么问题呢?

+1

你会得到什么样的错误? – 0xDEADC0DE

+0

有时日志不会被打印退出工作室并重新启动再次检查它会工作,但不重新启动只需退出并重新启动 –

+0

@ 0xDEADC0DE它不会打印按钮上的日志。 – GaborH

回答

0

正如许多人说,这个问题是与重新启动应用程序。首先,我去了logcat的监视器并关闭了正在运行的应用程序,然后再次运行该应用程序。重新启动应用后,日志仍然没有出现。然后,我从我的设备上卸载应用程序,然后再次运行。该应用程序后工作。

感谢您的帮助和时间来帮助解决我的问题。

0

该设置,您的排布置的Android父:descendantFocusability =“blocksDescendants” 和 与下面的代码替换代码,在上面的评论

public class MyMovieAdapter extends RecyclerView.Adapter<MyMovieAdapter.ViewHolder> { 

    private Context context; 
    Cursor dataCursor; 

    public MyMovieAdapter(Context context, Cursor cursor,) { 
     this.context = context; 
     this.dataCursor = cursor; 

    } 

    @Override 
    public MyMovieAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.my_movies_listrow, viewGroup, false); 

     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder viewHolder, int i) { 

     dataCursor.moveToPosition(i); 
     viewHolder.my_movie_delete_button.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       Log.e("AAAA", "It doesn't print that log on a button click"); 
      } 
     }); 

     viewHolder.tv_original_title.setText(dataCursor.getString(1)); 
     Picasso.with(context).load(dataCursor.getString(9)).resize(150,225).into(viewHolder.img_my_movie); 

    } 

    @Override 
    public int getItemCount() { 
     return dataCursor.getCount(); 
    } 



    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
     TextView tv_original_title; 
     ImageView img_my_movie; 
     Button my_movie_delete_button; 

     public ViewHolder(View view) { 
      super(view); 


      tv_original_title = (TextView)view.findViewById(R.id.tv_original_title); 
      img_my_movie = (ImageView)view.findViewById(R.id.img_my_movie); 
      my_movie_delete_button = (Button)view.findViewById(R.id.my_movies_delete_button); 


     } 

      } 
    public Cursor swapCursor(Cursor cursor) { 
     if (dataCursor == cursor) { 
      return null; 
     } 
     Cursor oldCursor = dataCursor; 
     this.dataCursor = cursor; 
     if (cursor != null) { 
      this.notifyDataSetChanged(); 
     } 
     return oldCursor; 
    } 
} 
+0

@Gabor Hartyandi尝试rajesh的代码,我希望它能为你工作 –

+2

试图描述是什么问题,而不是只发布解决方案。这将有助于此人在未来避免这些问题。 – deejay

+0

@Rajesh它没有工作。它不打印。 – GaborH

相关问题