2015-08-13 2 views
1

У меня есть основное приложение, которое получает некоторые данные из файла JSON в Интернете. Это массив из 6 предметов. Каждый элемент состоит из нескольких целых чисел, строк и т. Д. Показывает только 1 строку и целое число в списке карт.RecyclerView Cards - Открыть новую активность

Когда я нажимаю на карту. Необходимо открыть новую деятельность и открыть более подробное представление. Я уже сделал эту акситивность, не заполняя данные. Просто чтобы построить макет. Но теперь я застрял.

Нормальное событие onClick, которое запускает новый Intent из моего основного действия, не представляет проблемы. Проблемы состоят в том, что я не знаю, где и как реализовать метод onClick на кнопке ON на карте, все еще зная, на какую карту кликается, чтобы я мог предоставить правильную информацию.

Любые идеи по этой теме? Просматривали всю ночь, но кажутся неудачными каждый раз.

Редактировать: 6 предметов хранятся в списке в основном виде деятельности. Поэтому мне просто нужно узнать номер индекса щелкнутого элемента, чтобы я мог прочитать правильный элемент в подробном представлении.

Второй редактировать viewHolder нажмите не регистрирует щелчок ...

public static class ParkingViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    CardView cv; 
    TextView parkingName; 
    TextView parkingCapacity; 

    ParkingViewHolder(View itemView) { 
     super(itemView); 

     cv = (CardView)itemView.findViewById(R.id.cv); 
     parkingName = (TextView)itemView.findViewById(R.id.parkingName); 
     parkingCapacity = (TextView)itemView.findViewById(R.id.parkingCapacity); 
    } 

    @Override 
    public void onClick(View v) { 
     Toast.makeText(v.getContext(), "The Item Clicked is: " + getAdapterPosition(), Toast.LENGTH_SHORT).show(); 
    } 

} 

ответ

1

Вот что я делаю.

У вас есть вид ViewHolder, вы расширяете OnClickListener на нем.

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener 

В вашем ViewHolder вы заявляете, что должно быть clickListened - например

protected ImageView vRowImage; 

public ViewHolder(View v) { 
      super(v); 
      vRowImage = (ImageView) v.findViewById(R.id.rowImage); 

      vRowImage.setClickable(true); 
      vRowImage.setOnClickListener(this); 
     } 

только изображение будет clickListened в этом примере - вы можете сделать это на кнопках, весь вид V или все, что вы хотите.

Добавить свой собственный OnItemClickListener в свой адаптер.

private OnItemClickListener mItemClickListener; 

Override OnClick в ViewHolder

@Override 
    public void onClick(View v) { 
     if (mItemClickListener != null) { 
      mItemClickListener.onItemClick(v, getLayoutPosition()); 
     } 
    } 

Добавить интерфейс и метод Set

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

public void SetOnItemClickListener(final OnItemClickListener mItemClickListener) { 
    this.mItemClickListener = mItemClickListener; 
} 

А в вашей деятельности/фрагмента вы просто назвать

mAdapter.SetOnItemClickListener(new MySomethingAdapter.OnItemClickListener() { 
    @Override 
    public void onItemClick(View view, int position) { 
    //you have view and position here 
    } 
} 
+0

Я попробую. В настоящее время я делаю что-то подобное. Из этого [источника] (http://stackoverflow.com/questions/27886737/recyclerview-get-position-and-switch-to-activity), но простой onClick не хочет работать ... даже с системой .out.println() –

+1

Почему вы имеете в виду именно то, что не работает? Попробуйте настроить только Toast на клик, чтобы вы знали, регистрирует ли он клик – poss

+0

Вот что я сделал. Тост не выполняется, и я не знаю, почему. –

0
Give a hand to this code, 

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


import java.util.List; 

import modals.Feeds; 


/** 
* Created by inext on 3/7/15. 
*/ 
public class CAdapter extends RecyclerView.Adapter<CAdapter.ViewHolder> { 

    private List<Feeds> items; 
    private Context context; 

    public CAdapter(final Context context, final List<Feeds> items, final FragmentClicked listener) { 
     this.items = items; 
     this.listener = listener; 
     this.context = context; 
    } 

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

    @Override 
    public void onBindViewHolder(final FeedAdapter.ViewHolder holder, int position) { 

    } 

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

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     public CircleImageView userImage; 
     public TextView txt_user, txt_msg, txt_minute; 

     public ViewHolder(View itemView) { 
      super(itemView); 
      Button btn = (Button) itemView.findViewById(R.id.frag_nfrow_bt_comment); 
      btn.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      Intnet in=new (context,OtherActivity.class); 
startactivity(in); 
     } 
    } 

} 
Смежные вопросы