use*_*433 9 android buttonclick android-cardview android-recyclerview
我使用RecyclerView与CardView和内部CardView有2个按钮.现在,通过静态类实现并覆盖事件(其工作)onClick来实现事件View.OnClickListenerViewHolder
@Override
public void onClick(View v) {
if (v.getId() == mClassBtn.getId()){
}
else if (v.getId() == mDaysBtn.getId()){
}
}
Run Code Online (Sandbox Code Playgroud)
寻找一个解决方案/模式来处理类Click中的Activity类
adapter = new ItemsListAdapter(getActivity(), data, new CustomItemClickListener() {
@override
public void onItemClick(View v, int position) {
Log.d(TAG, "clicked position:" + position);
// which button clicked and separate action for each button
}
});
// CustomItemClickListener -- interface in the adapter class which holds the click event .
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常,能够记录Clicks但无法区分哪个按钮已被点击.
感谢任何帮助.提前致谢.
hea*_*hoT 13
这是实现这一目标的最佳方式: -
这就是我的实施方式
public class FollowersDetailsAdapter extends RecyclerView.Adapter<FollowersDetailsAdapter.MyViewHolder> {
private List<GetUserFollowDetailsResponseData> followersList;
Context context;
public FollowersDetailsAdapterListener onClickListener;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView rv_tv_follower_name, rv_tv_follower_desig;
public CircleImageView rv_iv_follower_image;
RelativeLayout rv_rel_layout_followers, rel_layout_followers;
LikeButton rv_iv_follower_icon;
public MyViewHolder(View view) {
super(view);
rv_rel_layout_followers = (RelativeLayout) view.findViewById(R.id.rv_rel_layout_followers);
rel_layout_followers = (RelativeLayout) view.findViewById(R.id.rel_layout_followers);
rv_iv_follower_image = (CircleImageView) view.findViewById(R.id.rv_iv_follower_image);
rv_tv_follower_name = (TextView) view.findViewById(R.id.rv_tv_follower_name);
rv_tv_follower_desig = (TextView) view.findViewById(R.id.rv_tv_follower_desig);
rv_iv_follower_icon = (LikeButton) view.findViewById(R.id.rv_iv_follower_icon);
rel_layout_followers.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickListener.iconTextViewOnClick(v, getAdapterPosition());
}
});
}
}
public FollowersDetailsAdapter(List<GetUserFollowDetailsResponseData> FollowersList, FollowersDetailsAdapterListener listener) {
this.followersList = FollowersList;
this.onClickListener = listener;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.followers_list_row, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
if (followersList.get(position).getImage() != null && !followersList.get(position).getImage().trim().equalsIgnoreCase("")) {
Picasso.with(context)
.load(followersList.get(position).getImage())
.resize(200, 200).into(holder.rv_iv_follower_image);
}
holder.rv_tv_follower_name.setText(followersList.get(position).getName());
holder.rv_tv_follower_desig.setText(followersList.get(position).getDescription());
if (followersList.get(holder.getAdapterPosition()).getID() == Integer.parseInt(ApplicationPreference.getUserId())) {
holder.rv_iv_follower_icon.setVisibility(View.GONE);
} else {
holder.rv_iv_follower_icon.setVisibility(View.VISIBLE);
if (followersList.get(position).getIsFollowing() == 0) {
holder.rv_iv_follower_icon.setLiked(false);
} else if (followersList.get(position).getIsFollowing() == 1) {
holder.rv_iv_follower_icon.setLiked(true);
}
}
holder.rv_iv_follower_icon.setOnLikeListener(new OnLikeListener() {
@Override
public void liked(LikeButton likeButton) {
onClickListener.iconImageViewOnClick(likeButton, position);
}
@Override
public void unLiked(LikeButton likeButton) {
onClickListener.iconImageUnFollowOnClick(likeButton, position);
}
});
}
public interface FollowersDetailsAdapterListener {
void iconTextViewOnClick(View v, int position);
void iconImageViewOnClick(View v, int position);
void iconImageUnFollowOnClick(View v, int position);
}
@Override
public int getItemCount() {
return followersList.size();
}
}
Run Code Online (Sandbox Code Playgroud)
并在您初始化适配器的活动中 -
followersDetailsAdapter = new FollowersDetailsAdapter(followersList, new FollowersDetailsAdapter.FollowersDetailsAdapterListener() {
@Override
public void iconTextViewOnClick(View v, int position) {
gotoUserProfile(followersList.get(position).getID());
}
@Override
public void iconImageViewOnClick(View v, int position) {
followUserProfile(followersList.get(position).getID(),1);
}
@Override
public void iconImageUnFollowOnClick(View v, int position){
followUserProfile(followersList.get(position).getID(),0);
}
});
Run Code Online (Sandbox Code Playgroud)
请尝试这个原则通过界面创建活动,适配器之间的通信,我希望这个原则可以帮助你:
接口:
public interface AdapterCallback {
void onClickCallback(YourModel itemModel);
}
Run Code Online (Sandbox Code Playgroud)
适配器:
public class YourAdapter extends RecyclerView.Adapter<YourAdapter.ViewHolder> {
private List<String> mList;
private AdapterCallback callback;
private Context context;
public YourAdapter(List<String> list, AdapterCallback adapterCallback) {
this.mList = list;
adapter = adapterCallback
}
@Override
public YourAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View item = inflater.inflate(R.layout.item_recycler, parent, false);
return new ViewHolder(item);
}
@Override
public void onBindViewHolder(YourAdapter.ViewHolder holder, int position) {
YourModel itemModel = list.get(position);
String lastName = itemModel.getLastName(); // for example;
String firstName = itemModel.getFirstName(); // for example;
holder.tvFirstName.setText(firstName);
holder.tvLastName.setText(lastName);
holder.tvFirstName.setOnClickListener(
// you can override this onClick into your Activity.
adapterCallback.onClickCallback(itemModel));
}
}
@Override
public int getItemCount() {
return mList.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
private TextView tvFirstName;
private TextView tvLastName;
ViewHolder(View itemView) {
super(itemView);
tvFirstName = (TextView) itemView.findViewById(R.id.tv_first);
tvLastName = (TextView) itemView.findViewById(R.id.tv_last);
}
}
Run Code Online (Sandbox Code Playgroud)
活动:
public class MyActivity extends AppCompatActivity implements AdapterCallback {
private YourAdapter adapter;
private List<String> items;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 1. init your list && fill it with needed data
// 2. init your adapter
// 3. put your list as parameter into constructor + interface
items = new ArrayList<String>() // empty
adapter = new YourAdapter(items, this)
}
@Override
public void onClickCallback(YourModel itemModel) {
Toast.makeText(this, itemModel.getFirstName(), Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)
我认为这些信息足以理解我的意思.同样的原则,您可以在界面中创建多个OnClick方法,或者为一些按钮添加一个onClick,并检查id或其他内容以获取所需的信息.祝好运
| 归档时间: |
|
| 查看次数: |
21230 次 |
| 最近记录: |