recyclerview点击item弹出popupwindow
来源:互联网 发布:mac可用的魔兽世界插件 编辑:程序博客网 时间:2024/05/18 01:40
recyclerview+popupwindow:
先看activity:
package com.fanyafeng.orlitedemo.recycleview.activity;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.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.Toolbar;import android.util.Log;import android.view.View;import android.widget.Toast;import com.fanyafeng.orlitedemo.BaseActivity;import com.fanyafeng.orlitedemo.R;import com.fanyafeng.orlitedemo.dao.Album;import com.fanyafeng.orlitedemo.dao.Song;import com.fanyafeng.orlitedemo.recycleview.adapter.MyRecycleViewAdapter;import com.orangegangsters.github.swipyrefreshlayout.library.SwipyRefreshLayout;import com.orangegangsters.github.swipyrefreshlayout.library.SwipyRefreshLayoutDirection;import org.litepal.crud.DataSupport;import java.util.ArrayList;import java.util.List;public class MyRecycleViewActivity extends BaseActivity { private RecyclerView rv_myrecycleview; private List<String> stringList = new ArrayList<>(); private MyRecycleViewAdapter myRecycleViewAdapter; private SwipyRefreshLayout swipyrefreshlayout; private int count = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_recycle_view); 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(); } }); getData(); initView(); initData(); } private void getData() { List<Album> albumList = DataSupport.where("name like ?", "album%").find(Album.class); int remain = albumList.size() % 21; int myCount = (albumList.size() - remain) / 21; if (count > myCount) { Toast.makeText(this, "已经加载完毕", Toast.LENGTH_SHORT).show(); return; } else { count += 1; for (int i = (count - 1) * 21; i < (count == (myCount + 1) ? (count - 1) * 21 + remain : count * 21); i++) { stringList.add(albumList.get(i).getName()); } } } private void initView() { swipyrefreshlayout = (SwipyRefreshLayout) findViewById(R.id.swipyrefreshlayout); rv_myrecycleview = (RecyclerView) findViewById(R.id.rv_myrecycleview); } private void initData() { myRecycleViewAdapter = new MyRecycleViewAdapter(this, stringList); rv_myrecycleview.setAdapter(myRecycleViewAdapter);// rv_myrecycleview.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)); rv_myrecycleview.setLayoutManager(new GridLayoutManager(this, 2, GridLayoutManager.VERTICAL, false)); swipyrefreshlayout.setOnRefreshListener(new SwipyRefreshLayout.OnRefreshListener() { @Override public void onRefresh(SwipyRefreshLayoutDirection direction) { if (direction == SwipyRefreshLayoutDirection.TOP) { stringList.clear(); count = 0; getData(); myRecycleViewAdapter.notifyDataSetChanged(); swipyrefreshlayout.setRefreshing(false); } else if (direction == SwipyRefreshLayoutDirection.BOTTOM) { getData(); myRecycleViewAdapter.notifyDataSetChanged(); swipyrefreshlayout.setRefreshing(false); } } }); }}
adapter
package com.fanyafeng.orlitedemo.recycleview.adapter;import android.app.ActionBar;import android.content.Context;import android.graphics.Bitmap;import android.graphics.drawable.BitmapDrawable;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.PopupWindow;import android.widget.TextView;import android.widget.Toast;import com.fanyafeng.orlitedemo.R;import com.fanyafeng.orlitedemo.util.MyUtils;import java.util.List;/** * Created by 365rili on 16/4/18. */public class MyRecycleViewAdapter extends RecyclerView.Adapter<MyRecycleViewAdapter.MyRecycleViewHolder> { private Context context; private List<String> itemList; public OnItemClickListener onItemClickListener; private PopupWindow popupView; public interface OnItemClickListener { void onItemClick(View view, int position); void onItemLongClick(View view, int position); } public MyRecycleViewAdapter(Context context, List<String> itemList) { this.context = context; this.itemList = itemList; } @Override public MyRecycleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item_myrecycler, parent, false); View popView = LayoutInflater.from(context).inflate(R.layout.layout_popwindow_recyclerview, parent, false); popupView = new PopupWindow(popView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); popupView.setTouchable(true); popupView.setOutsideTouchable(true); popupView.setBackgroundDrawable(new BitmapDrawable(context.getResources(), (Bitmap) null)); return (new MyRecycleViewHolder(view)); } @Override public void onBindViewHolder(final MyRecycleViewHolder holder, final int position) { if (onItemClickListener != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onItemClickListener.onItemClick(holder.itemView, position); } }); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { onItemClickListener.onItemLongClick(holder.itemView, position); return true; } }); } holder.tv_myrecycler_item.setText(itemList.get(position)); holder.tv_myrecycler_item.setOnClickListener(new onItemClick(position)); } @Override public int getItemCount() { return itemList.size(); } static class MyRecycleViewHolder extends RecyclerView.ViewHolder { private TextView tv_myrecycler_item; public MyRecycleViewHolder(View itemView) { super(itemView); tv_myrecycler_item = (TextView) itemView.findViewById(R.id.tv_myrecycler_item); } } class onItemClick implements View.OnClickListener { private int position; public onItemClick(int position) { this.position = position; } @Override public void onClick(View v) { Toast.makeText(context, "第" + position + "个被点击了", Toast.LENGTH_SHORT).show(); v.getHeight(); int[] location = new int[2]; v.getLocationInWindow(location); Log.d("TAG", "点击的item的高度:" + v.getHeight() + "x值:" + location[0] + "y值" + location[1]); if (MyUtils.getScreenHeight(context) - MyUtils.getNavigationBarHeight(context) - location[1] < MyUtils.dip2px(context, 80)) {// popupView.showAsDropDown(v, MyUtils.getScreenWidth(context) / 2 - (int) MyUtils.dip2px(context, 40), -v.getHeight() - (int) MyUtils.dip2px(context, 80)); popupView.showAsDropDown(v, MyUtils.getScreenWidth(context) / 4 - (int) MyUtils.dip2px(context, 40), -v.getHeight() - (int) MyUtils.dip2px(context, 80)); } else {// popupView.showAsDropDown(v, MyUtils.getScreenWidth(context) / 2 - (int) MyUtils.dip2px(context, 40), 0); popupView.showAsDropDown(v, MyUtils.getScreenWidth(context) / 4 - (int) MyUtils.dip2px(context, 40), 0); } } } class onItemLongClick implements View.OnLongClickListener { private int position; public onItemLongClick(int position) { this.position = position; } @Override public boolean onLongClick(View v) { Toast.makeText(context, "第" + position + "个被点击了", Toast.LENGTH_SHORT).show(); return false; } }}
这是核心代码,暂时没有测试性能,不过popupwindow设置不可点击,外围不解散的话会跟着item移动,但是,但是因为item复用,所以你知道的,不建议那样搞,当然肯定有办法避免这种情况,因为position是唯一的,可以根据此进行唯一的标识
0 0
- recyclerview点击item弹出popupwindow
- 对话框 适用于recyclerView点击Item中的按钮弹出
- ListView点击item底部弹出popupWindow删除、修改、取消选择框
- 点击 PopupWindow ,ListView 底部弹出
- RecyclerView设置Item点击事件
- RecyclerView Item 的点击事件
- RecyclerView中item点击事件
- RecyclerView设置 item点击事件
- RecyclerView的item点击事件
- RecyclerView item 点击事件设置
- RecyclerView点击Item回到顶部
- RecyclerView的item点击事件
- RecyclerView中的item点击事件
- RecyclerView的item点击事件
- RecyclerView的Item点击事件
- Android RecyclerView Item点击事件
- RecyclerView的item点击事件
- PopupWindow+ListView item 点击无效解决办法
- ubuntu12.04 安装 gcc-4.8
- Oracle使用存储过程分页
- Spring自动注入properties文件
- 代码重构[iOS开发]
- 我的2016书单
- recyclerview点击item弹出popupwindow
- stack frame栈帧简介(逆向工程角度)
- Node.js 读写文件
- 深入理解DIP、IoC、DI以及IoC容器
- adb命令-基础篇
- puppet安装puppet server、client
- 添加Activity并传递数据
- 搭建简单的servlet&MySQL
- 文章标题