2016-09-17 2 views
2
  1. 내가 시작 (휴지통보기 및 카드보기 사용) 내 그리드의 각 항목에 대한 온 클릭을 구현하는 방법을 알고 싶습니다

    새로운 activity.Below 내 ViewHolder 클래스와이다 RecyclerView 어댑터 클래스구현의 onclick에 Recyclerview 어댑터

    이 내가 Callba으로 인터페이스를 사용하여 내 RecyclerView 어댑터 클래스

    import android.app.Activity; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.nfc.Tag; 
    import android.nfc.TagLostException; 
    import android.support.v7.widget.RecyclerView; 
    import android.util.Log; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.Toast; 
    
    import java.util.List; 
    
    public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> { 
    
        private List<ItemObject> itemList; 
        private Context context; 
    
        public RecyclerViewAdapter(Context context, List<ItemObject> itemList) { 
         this.itemList = itemList; 
         this.context = context; 
        } 
    
        @Override 
        public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) { 
    
         View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_list, null); 
         RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView); 
         return rcv; 
        } 
    
        @Override 
        public void onBindViewHolder(RecyclerViewHolders holder, final int position) { 
         holder.countryName.setText(itemList.get(position).getName()); 
         holder.countryPhoto.setImageResource(itemList.get(position).getPhoto()); 
         holder.countryPhoto.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View view) { 
           Toast.makeText(view.getContext(),"This is Maps",Toast.LENGTH_SHORT).show(); 
    
          } 
         }); 
        } 
    
        @Override 
        public int getItemCount() { 
         return this.itemList.size(); 
        } 
    } 
    
    //This is my Recycler View Holder Class 
    
    
    import android.content.Intent; 
    import android.support.v7.widget.RecyclerView; 
    import android.util.Log; 
    import android.view.View; 
    import android.widget.ImageView; 
    import android.widget.TextView; 
    import android.widget.Toast; 
    
    public class RecyclerViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener { 
    
        public TextView countryName; 
        public ImageView countryPhoto; 
    
        public RecyclerViewHolders(View itemView) { 
         super(itemView); 
         itemView.setOnClickListener(this); 
         countryName = (TextView) itemView.findViewById(R.id.country_name); 
         countryPhoto = (ImageView) itemView.findViewById(R.id.country_photo); 
        } 
    
        @Override 
        public void onClick(View view) { 
         Toast.makeText(view.getContext(), "Clicked Country Position = " + getPosition(), Toast.LENGTH_SHORT).show(); 
    
    
        } 
    } 
    
+0

문제가 무엇입니까 내가 대신 할 것이라고는이 같은 어댑터에 개인 내부 클래스를 추가입니까? – Enzokie

+0

왜 뷰 홀더에 클릭 리스너를 추가 했습니까? –

답변

0

입니다 이 사건을 처리 할 ck.

먼저 어댑터 내부에 인터페이스 클래스를 만듭니다.

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> { 

    private List<ItemObject> itemList; 
    private Context context; 
    private ItemClickListener mItemClickListener; 

    public RecyclerViewAdapter(Context context, List<ItemObject> itemList) { 
     this.itemList = itemList; 
     this.context = context; 
    } 

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

     View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_list, null); 
     RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView); 
     return rcv; 
    } 

    public void addItemClickListener(ItemClickListener listener) { 
     mItemClickListener = listener; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerViewHolders holder, final int position) { 
     holder.countryName.setText(itemList.get(position).getName()); 
     holder.countryPhoto.setImageResource(itemList.get(position).getPhoto()); 
     holder.countryPhoto.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (mItemClickListener != null) { 
        mItemClickListener.onItemClick(position); 
       } 
      } 
     }); 
    } 

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

    //Define your Interface method here 
    public interface ItemClickListener { 
     void onItemClick(int position); 
    } 
} 

그런 다음,하자가 활동의 또는 조각은 그 인터페이스를 구현하고 청취자를 추가합니다.

public class MyFragment extends Fragment 
    implements RecyclerViewAdapter.ItemClickListener { 

    private List<ItemObject> mItemList; 
    ... 
    @Override 
    public View onCreateView(final LayoutInflater inflater, final ViewGroup container, 
          final Bundle savedInstanceState) { 
     ... 
     //Make sure mItemList not NULL 
     RecyclerViewAdapter adapter = new RecyclerViewAdapter(getContext(), mItemList); 
     //Add Item Click listener 
     adapter.addItemClickListener(this); 
    } 


    @Override 
    public void onItemClick(int position) { 
     Toast.makeText(.getContext(),"Click on item: " + position,Toast.LENGTH_SHORT).show(); 
    } 
} 

희망이 도움이 될 것입니다!

+0

답변을 주셔서 감사합니다. 예. 그들은 나를 위해 작동합니다. – Xcoder

+0

@Xcoder :) 도움을 청하십시오. –

0

잘 같은 코드 모양, 여기에 새로운 활동을 열 의도를 creat에하는 방법을 요구하는 자극 인 경우

이 게으른 방법 최선의 연습

하지 않는 것이 좋습니다 변경 정적 변수를 확인해야합니다 당신 미안의 activty에서 마녀는 클릭

를 내부에 그

 public class MainActivity extends AppCompatActivity 

public static Activity activity; 


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

       activity=this; 

     } 
    } 

과 같은 refrance에게 어떤 것을 보유입니다 0

... 

      @Override 
      public void onClick(View v) { 
Toast.makeText(.getContext(),"Click on item: " + position,Toast.LENGTH_SHORT).show(); 
       startActivity(new Intent(MainActivity.activity, MyOtherActivity.class)); 
      } 

... 
+0

감사합니다. 시도해 보겠습니다. – Xcoder

+0

작동하는지 알려주세요. – Hamza

0

나는 당신의 문제가 무엇인지 초기 후 완전히 명확하지 해요,하지만 당신이해야 할 모든 당신의 RecyclerViewAdapter에 OnClickListener를 구현하는 경우, 바로 다음을 추가 :

첫째, 변경 클래스 선언 여기에 :

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> implements OnClickListener {

그런 다음, 인터페이스를 완료하기 위해 클래스에 온 클릭 방법을 추가 할 수 있습니다.

@Override 
public void onClick(View view) { 
    Toast.makeText(this.getContext(),"Code to change activity goes here." ,Toast.LENGTH_SHORT).show(); 
} 

마지막으로 어댑터 클래스에 OnClickListener를 설정해야합니다.

@Override 
public void onBindViewHolder(RecyclerViewHolders holder, final int position) { 
    holder.setOnClickListener(this); 
    holder.countryName.setText(itemList.get(position).getName()); 
    holder.countryPhoto.setImageResource(itemList.get(position).getPhoto()); 
    holder.countryPhoto.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (mItemClickListener != null) { 
       mItemClickListener.onItemClick(position); 
      } 
     } 
    }); 
} 

이제 개인적으로 나는 이런 식으로하지 않을 것입니다.

private AdapterOnClickListener implements OnClickListener() { 
    private String message; 

    public AdapterOnClickListener (String toast) { 
     message = toast; 
    } 

    public void onClick (View v) { 
     Toast.makeText(this.getContext(),toast ,Toast.LENGTH_SHORT).show(); 
    } 

} 

을 그럼 당신은 전화 어댑터에 :

@Override 
public void onBindViewHolder(RecyclerViewHolders holder, final int position) { 
    holder.setOnClickListener(new AdapterOnClickListener ("Instead of a string, I can be an intent. Then in your listener, you can call (If I recall correctly) getContext().startActivity(intent), and have an activity."); 
    holder.countryName.setText(itemList.get(position).getName()); 
    holder.countryPhoto.setImageResource(itemList.get(position).getPhoto()); 
    holder.countryPhoto.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (mItemClickListener != null) { 
       mItemClickListener.onItemClick(position); 
      } 
     } 
    }); 
} 
관련 문제