2017-06-20 60 views
-1

「我正在試圖使Cardview在可打開新活動的位置點擊,但我在調用setitemclcik監聽器時丟失了某處,它給出了一個錯誤代碼f anonymous itemclicklistener。」找不到符號方法setItemClickListener

RecyclerViewAdapter.java

import android.content.Context; 
import android.content.Intent; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.android.volley.toolbox.ImageLoader; 
import com.android.volley.toolbox.NetworkImageView; 
import info.techabyte.parentsapp.newsletter.DetailActivity; 

import java.util.List; 

import info.techabyte.parentsapp.R; 

import static info.techabyte.parentsapp.R.id.imageUrl; 
import static info.techabyte.parentsapp.R.id.year; 
import static info.techabyte.parentsapp.R.id.quarter; 


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

    Context context; 

    List<NewsletterAdapter> getNewsletterAdapter; 

    ImageLoader imageLoader1; 


    public NewsletterRecyclerViewAdapter(List<NewsletterAdapter> getNewsletterAdapter, Context context){ 

     super(); 
     this.getNewsletterAdapter = getNewsletterAdapter; 
     this.context = context; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.newsletter_recyclerview_items, parent, false); 

     ViewHolder viewHolder = new ViewHolder(v); 

     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder Viewholder, int position) { 

     NewsletterAdapter getNewsletterAdapter1 = getNewsletterAdapter.get(position); 

     imageLoader1 = ServerImageParseAdapter.getInstance(context).getImageLoader(); 

     imageLoader1.get(getNewsletterAdapter1.getImageServerUrl(), 
       ImageLoader.getImageListener(
         Viewholder.networkImageView,//Server Image 
         R.mipmap.ic_launcher,//Before loading server image the default showing image. 
         android.R.drawable.ic_dialog_alert //Error image if requested image dose not found on server. 
       ) 
     ); 

     Viewholder.networkImageView.setImageUrl(getNewsletterAdapter1.getImageServerUrl(), imageLoader1); 

     Viewholder.ImageTitleNameView.setText(getNewsletterAdapter1.getImageTitleName()); 

     Viewholder.YearView.setText(getNewsletterAdapter1.getYear()); 

     Viewholder.setItemClickListener(new ItemClickListener() { 
      @Override 
      public void onItemClick(int pos) { 
       openDetailActivity(quarter,year,imageUrl); 
       Toast.makeText(context,quarter,Toast.LENGTH_SHORT).show(); 
      } 
     }); 

    } 

    @Override 
    public int getItemCount() { 

     return getNewsletterAdapter.size(); 
    } 



    private void openDetailActivity(String quarter, String year, int image) 
     { 
      Intent i=new Intent(context, DetailActivity.class); 

      //PACK DATA TO SEND 
      i.putExtra("quarter",quarter); 
      i.putExtra("year",year); 
      i.putExtra("imageUrl",image); 

      //open activity 
      context.startActivity(i); 

     } 

    class ViewHolder extends RecyclerView.ViewHolder{ 

     public TextView ImageTitleNameView; 
     public TextView YearView; 
     public NetworkImageView networkImageView ; 

     public ViewHolder(View itemView) { 

      super(itemView); 

      ImageTitleNameView = (TextView) itemView.findViewById(R.id.textView_item) ; 

      YearView = (TextView) itemView.findViewById(R.id.textView_item1) ; 

      networkImageView = (NetworkImageView) itemView.findViewById(R.id.VollyNetworkImageView1) ; 


     } 


    } 

} 

DetailActivity.java

import android.content.Intent; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.TextView; 

import info.techabyte.parentsapp.R; 


public class DetailActivity extends AppCompatActivity { 

    TextView quartertxt; 
    TextView yeartxt; 
    ImageView imageUrl; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_detail); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

     //INITIALIZE VIEWS 
     quartertxt= (TextView) findViewById(R.id.quarter); 
     yeartxt= (TextView) findViewById(R.id.year); 
     imageUrl= (ImageView) findViewById(R.id.imageUrl); 

     //RECEIVE DATA 
     Intent i=this.getIntent(); 
     String quarter=i.getExtras().getString("quarter"); 
     String year=i.getExtras().getString("year"); 
     int image=i.getExtras().getInt("imageUrl"); 

     //BIND DATA 
     quartertxt.setText(quarter); 
     yeartxt.setText(year); 
     imageUrl.setImageResource(image); 
    } 

} 

Newsletterrecyclerviewitems.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/cardview1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    card_view:cardElevation="3dp" 
    card_view:contentPadding="3dp" 
    card_view:cardCornerRadius="3dp" 
    card_view:cardMaxElevation="3dp" 
    > 


    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 

     <com.android.volley.toolbox.NetworkImageView 
      android:id="@+id/VollyNetworkImageView1" 
      android:layout_width="150dp" 
      android:layout_height="100dp" 
      android:src="@mipmap/ic_launcher"/> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="@string/quarter" 
      android:id="@+id/textView_item" 
      android:layout_centerVertical="false" 
      android:layout_toRightOf="@+id/VollyNetworkImageView1" 
      android:layout_toEndOf="@+id/VollyNetworkImageView1" 
      android:layout_marginLeft="20dp"/> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="@string/year" 
      android:id="@+id/textView_item1" 
      android:layout_centerVertical="false" 
      android:layout_toRightOf="@+id/VollyNetworkImageView1" 
      android:layout_toEndOf="@+id/VollyNetworkImageView1" 
      android:layout_below="@+id/textView_item" 
      android:layout_marginLeft="20dp"/> 

    </RelativeLayout> 

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

u能請解釋豆蔻行 「PUT_YOUR_OBJECT」,年份和季度價值觀詮釋 –

+0

'Viewholder.ImageTitleNameView.'意味着你在Viewholder下有一個textview。就像這樣,你可以調用你的Parent佈局ID –

+0

你解決了你的問題還沒有 –

回答

1

錯誤的做法

Viewholder.setItemClickListener(new ItemClickListener() { 
      @Override 
      public void onItemClick(int pos) { 
       ...... 
      } 
     }); 

正道

您的觀看者擁有XML屬性。你應該打電話給你的RootLayout對象。

Viewholder.Your_root_layout_OBJ.setItemClickListener(new ItemClickListener() { 
      @Override 
      public void onItemClick(int pos) { 
       ...... 
      } 
     }); 
+0

先生,在那裏我得到這個根佈局對象 –

+0

顯示'newsletter_recyclerview_items.xml' –

+0

@HarisDurrani看看我的回答:) – Slampy

0

你的代碼有多種煩惱: 1)不要叫那樣ViewHolder的領域。您需要從onBindViewHolder方法中的持有者參數中轉換它。

YourViewHolderClass yourViewHolderMember =(YourViewHolderClass) holder;

2)您的ViewHolder類沒有方法setItemClickListener。但它有根元素字段稱爲itemView。試試這樣:

yourViewHolderMember.itemView.setOnClickListener()