Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何创建滚动到选定位置的回收器视图_Android_Android Recyclerview_Onclicklistener_Scrollable - Fatal编程技术网

Android 如何创建滚动到选定位置的回收器视图

Android 如何创建滚动到选定位置的回收器视图,android,android-recyclerview,onclicklistener,scrollable,Android,Android Recyclerview,Onclicklistener,Scrollable,我正在尝试制作一个应用程序,当我们在recycler视图中单击特定项目时,它应该在recycler视图中启动一个片段,以在屏幕中央显示所选项目,就像instagram网格视图一样。当我们选择一篇文章时,它会在中心显示所选文章的详细信息,我们还可以滚动到其他文章 这是我的网格适配器 public class PostImageAdapter extends RecyclerView.Adapter<PostViewHolder> { private Context context;

我正在尝试制作一个应用程序,当我们在recycler视图中单击特定项目时,它应该在recycler视图中启动一个片段,以在屏幕中央显示所选项目,就像instagram网格视图一样。当我们选择一篇文章时,它会在中心显示所选文章的详细信息,我们还可以滚动到其他文章

这是我的网格适配器

public class PostImageAdapter extends RecyclerView.Adapter<PostViewHolder> {

private Context context;
private List<Post> posts;
private OnGridItemSelected onGridItemSelected;

public PostImageAdapter(Context context) {
    this.context = context;
    posts = new ArrayList<>();
    onGridItemSelected = (OnGridItemSelected) context;
}

@Override
public PostViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.layout_squareimage, parent, false);
    return new PostViewHolder(view);
}

@Override
public void onBindViewHolder(PostViewHolder holder, final int position) {

    Post post = posts.get(position);
    Glide.with(context).load(post.getImagePath())
            .error(R.drawable.ic_refresh)
            .placeholder(R.color.grey_3)
            .diskCacheStrategy(DiskCacheStrategy.RESULT)
            .into(holder.imageView);

    final int adapterPosition = holder.getAdapterPosition();

    holder.imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(context, "Adapter Position is" + adapterPosition , Toast.LENGTH_SHORT).show();
            onGridItemSelected.onItemSelected(adapterPosition);
        }
    });
}

public void addPaths(List<Post> paths) {
    int startIndex = posts.size();
    posts.addAll(paths);
    notifyItemRangeInserted(startIndex, posts.size());
}

@Override
public int getItemCount() {
    return posts.size();
}
公共类PostImageAdapter扩展了RecyclerView.Adapter{
私人语境;
私人名单员额;
已选择专用OnGridItemSelected OnGridItemSelected;
公共PostImageAdapter(上下文){
this.context=上下文;
posts=newarraylist();
onGridItemSelected=(onGridItemSelected)上下文;
}
@凌驾
public PostViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图=LayoutFlater.from(上下文)。充气(R.layout.layout_squareimage,父级,false);
返回新的PostViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(PostViewHolder,最终int位置){
Post Post=posts.get(位置);
Glide.with(context.load)(post.getImagePath())
.错误(R.drawable.ic_刷新)
.占位符(R.color.grey_3)
.diskCacheStrategy(diskCacheStrategy.RESULT)
.插入(支架.图像视图);
final int adapterPosition=holder.getAdapterPosition();
holder.imageView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Toast.makeText(上下文,“适配器位置为”+适配器位置,Toast.LENGTH_SHORT).show();
onGridItemSelected.onItemSelected(适配器位置);
}
});
}
公共无效添加路径(列表路径){
int startIndex=posts.size();
posts.addAll(路径);
notifyItemRangeInserted(startIndex,posts.size());
}
@凌驾
public int getItemCount(){
返回后。大小();
}
我的网格碎片

public void setupGrid() {
    mRecyclerView.setLayoutManager(new GridLayoutManager(context, 3));
    final PostImageAdapter adapter = new PostImageAdapter(context);
    mRecyclerView.setAdapter(adapter);
    mRecyclerView.setHasFixedSize(true);
    FirebaseQuery.getAllPost().addListenerForSingleValueEvent(new ValueEventListener() {
        final ArrayList<Post> posts = new ArrayList<>();

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            posts.clear();
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                posts.add(ds.getValue(Post.class));
            }
            adapter.addPaths(posts);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}
public void setupGrid(){
setLayoutManager(新的GridLayoutManager(上下文,3));
最终PostImageAdapter=新的PostImageAdapter(上下文);
mRecyclerView.setAdapter(适配器);
mRecyclerView.setHasFixedSize(true);
FirebaseQuery.getAllPost().addListenerForSingleValueEvent(新值EventListener()){
最终ArrayList posts=新ArrayList();
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
posts.clear();
对于(DataSnapshot ds:DataSnapshot.getChildren()){
posts.add(ds.getValue(Post.class));
}
adapter.addpath(posts);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
后细节片段

public class PostDetailsFragment extends Fragment {
private static final String TAG = PostDetailsFragment.class.getSimpleName();

@BindView(R.id.postDetailsRecyclerView)
RecyclerView mRecyclerView;
private Unbinder unbinder;
private Context context;
private int i;

public PostDetailsFragment() {
    super();
    setArguments(new Bundle());
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_post_details, container, false);
    unbinder = ButterKnife.bind(this, view);
    context = getActivity();
    try {
        i = getPosition();
    } catch (NullPointerException e) {
        Log.d(TAG, "onCreateView:" + e.getMessage());
    }
    return view;
}

@Override
public void onStart() {
    super.onStart();
    setRecyclerView(i);
}

private int getPosition() {
    Bundle bundle = this.getArguments();
    if (bundle != null) {
        return bundle.getInt(context.getString(R.string.key));
    } else {
        return 0;
    }
}

public void setRecyclerView(int position) {

    final PostImageAdapter adapter = new PostImageAdapter(context);
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
    mRecyclerView.setLayoutManager(linearLayoutManager);
    linearLayoutManager.scrollToPosition(position);
    mRecyclerView.setAdapter(adapter);
    FirebaseQuery.getAllPost().addListenerForSingleValueEvent(new ValueEventListener() {
        final ArrayList<Post> posts = new ArrayList<>();

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            posts.clear();
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                posts.add(ds.getValue(Post.class));
            }
            adapter.addPaths(posts);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}

@Override
public void onDestroy() {
    super.onDestroy();
    unbinder.unbind();
}
公共类PostDetailsFragment扩展了片段{
私有静态最终字符串标记=PostDetailsFragment.class.getSimpleName();
@BindView(R.id.postDetailsRecyclerView)
回收视图mRecyclerView;
私人无障碍者;
私人语境;
私人互联网i;
公共PostDetailsFragment(){
超级();
setArguments(新Bundle());
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment\u post\u详细信息,容器,错误);
unbinder=ButterKnife.bind(这个,视图);
context=getActivity();
试一试{
i=getPosition();
}捕获(NullPointerException e){
d(标记“onCreateView:+e.getMessage());
}
返回视图;
}
@凌驾
public void onStart(){
super.onStart();
setRecyclerView(一);
}
private int getPosition(){
Bundle=this.getArguments();
if(bundle!=null){
返回bundle.getInt(context.getString(R.string.key));
}否则{
返回0;
}
}
公共void setRecyclerView(内部位置){
最终PostImageAdapter=新的PostImageAdapter(上下文);
LinearLayoutManager LinearLayoutManager=新的LinearLayoutManager(上下文);
mRecyclerView.setLayoutManager(linearLayoutManager);
linearLayoutManager.scrollToPosition(位置);
mRecyclerView.setAdapter(适配器);
FirebaseQuery.getAllPost().addListenerForSingleValueEvent(新值EventListener()){
最终ArrayList posts=新ArrayList();
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
posts.clear();
对于(DataSnapshot ds:DataSnapshot.getChildren()){
posts.add(ds.getValue(Post.class));
}
adapter.addpath(posts);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
@凌驾
公共空间{
super.ondestory();
unbinder.unbind();
}
}

我试图传递适配器位置,并将适配器设置为滚动/从该位置开始,但它似乎不起作用。请帮助我创建类似instagram的系统,在该系统中,它以线性布局显示带有详细信息的详细帖子