2017-01-31 20 views
-1

我需要我RecyclerView圖像可以被按下,並進入下一個活動。我有Adapter的代碼。android-如何意圖RecyclerView在AdapterClass

public class MakananAdapter extends RecyclerView.Adapter<MakananAdapter.ViewHolder> { 
ArrayList<Makanan> makananList; 

public MakananAdapter(ArrayList<Makanan> makananList) 
{ 
    this.makananList = makananList; 
} 

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

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    Makanan tanaman = makananList.get(position); 
    holder.tvJudul.setText(tanaman.judul); 
    /*holder.tvHarga.setText(tanaman.harga);*/ 
    holder.ivFoto.setImageDrawable(tanaman.foto); 
    holder.tvJudul.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

     } 
    }); 
} 



@Override 
public int getItemCount() { 
    if(makananList!=null) 
     return makananList.size(); 
    return 0; 
} 

public class ViewHolder extends RecyclerView.ViewHolder { 
    ImageView ivFoto; 
    TextView tvJudul; 
    TextView tvHarga; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     ivFoto = (ImageView) itemView.findViewById(R.id.imageView); 
     tvJudul = (TextView) itemView.findViewById(R.id.textViewJudul); 
     /*tvHarga = (TextView) itemView.findViewById(R.id.textViewHarga);*/ 
    } 
}} 

如何意圖RecyclerView在AdapterClass中?

+0

你的問題是什麼? –

+0

你的onClick方法是空的... – Chisko

+0

我的問題是我如何意圖從適配器的圖像,因爲我的imageview是來自arraylist,並不是一個活動 –

回答

-1

通行證Context到您的適配器constuctor

ArrayList<Makanan> makananList; 
Context _context; 

public MakananAdapter(Context context, ArrayList<Makanan> makananList) { 
    this.makananList = makananList; 
    this._context = context; 
} 

可以在ViewHolder設置OnClickListener(見評論爲什麼它是更好地Viewholder設置Clicklisteners)

public ViewHolder(View itemView) { 
    super(itemView); 
    ivFoto = (ImageView) itemView.findViewById(R.id.imageView); 
    tvJudul = (TextView) itemView.findViewById(R.id.textViewJudul); 
    /*tvHarga = (TextView) itemView.findViewById(R.id.textViewHarga);*/ 
    ivFoto.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
       // Intent to start another activity... 
       Intent intent =new Intent(_context, TargetActivity.class); 
       _context.startActivity(intent); 
     } 
    }); 
} 
+0

點擊列表應該在bindviewholder正確的位置後回收列表 –

+1

在ViewHolder中而不是在'onBindViewHolder()'中更好一些,這是因爲每個項目都會調用onBindViewHolder(),並且在ViewHolder中調用一次時設置click監聽器是不必要的重複選項構造函數。然後,如果您的點擊響應取決於所點擊項目的位置,您可以簡單地在ViewHolder中調用'getAdapterPosition()'。你最好刪除投票! – Wizard

+0

然而它不是上述問題的答案 –

1

讓你的構造類似這樣的

private Context context; 
public MakananAdapter(ArrayList<Makanan> makananList, Context context) { 
    this.makananList = makananList; 
    this.context = context; 
} 

Pass在context當你初始化適配

MakananAdapter = new MakananAdapter(makananList, this); 

而且適配器在onClickListner做這樣

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

     Intent openNextActivity = new Intent(context, yourActivityName.class); 
     context.startActivity(openNextActivity) 
    } 
}); 
+0

這是上述問題的正確答案......需要傳遞構造函數上的Activity上下文才能使用Intents。 –

-1

創建由RecyclerItemClickListener的名稱的類並添加此

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener{ 

private OnItemClickListener mListener; 

public interface OnItemClickListener { 
    public void onItemClick(View view, int position); 

    public void onLongItemClick(View view, int position); 
} 

GestureDetector mGestureDetector; 

public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) { 
    mListener = listener; 
    mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
     @Override 
     public boolean onSingleTapUp(MotionEvent e) { 
      return true; 
     } 

     @Override 
     public void onLongPress(MotionEvent e) { 
      View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); 
      if (child != null && mListener != null) { 
       mListener.onLongItemClick(child, recyclerView.getChildAdapterPosition(child)); 
      } 
     } 
    }); 
} 

@Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { 
    View childView = view.findChildViewUnder(e.getX(), e.getY()); 
    if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { 
     mListener.onItemClick(childView, view.getChildAdapterPosition(childView)); 
     return true; 
    } 
    return false; 
} 

@Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { } 

@Override 
public void onRequestDisallowInterceptTouchEvent (boolean disallowIntercept){}} 

並在你的活動中加入這個

recyclerView.addOnItemTouchListener(
         new RecyclerItemClickListener(MainActivity.this, recyclerView ,new RecyclerItemClickListener.OnItemClickListener() { 
          @Override public void onItemClick(View view, int position) { 

           Intent intent = new Intent(MainActivity.this, Activity1.class); 

          } 
          @Override public void onLongItemClick(View view, int position) { 
           Toast.makeText(MainActivity.this, "Long press on image" + position, Toast.LENGTH_LONG).show(); 
          } 
         })); 
+0

他需要點擊圖像而不是列表項......基本上他的問題是使用適配器類的意圖。因爲它不是一項活動。 –