首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在StaggeredGridLayout中滚动和调整项目

在StaggeredGridLayout中滚动和调整项目
EN

Stack Overflow用户
提问于 2015-10-27 06:57:19
回答 1查看 144关注 0票数 1

在我的应用程序中,我想在主片段中使用StaggeredGridLKayout。但是,当我添加一个新项并通知适配器新项时:

代码语言:javascript
复制
@Override
  public void onSaveSuccess() {
    getLoaderManager().restartLoader(0, null, this);
    mFragmentCardAdapter.notifyDataSetChanged();
  }

当屏幕上有太多的物品时,就会出现问题。屏幕变得空,项目被放置在它下面,我必须向下滚动到它们。此外,他们不断调整和移动,直到他们达到点,当顶部的屏幕是好的。然而,我希望它停止留在顶部的空间,只需添加最新的附加在顶部。

下面是我使用的一些方法:

代码语言:javascript
复制
@Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getActivity().setTitle(getResources().getString(R.string.title));
    getLoaderManager().initLoader(0, null, this);
    mList = new ArrayList<Record>();
  }

  @Nullable
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment, container, false);
  }

  @Override
  public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    ButterKnife.bind(this, view);
    mRecyclerView.setHasFixedSize(false);
    mStaggered = new StaggeredGridLayoutManager(getResources()
        .getInteger(R.integer.staggered_columns), StaggeredGridLayoutManager.VERTICAL);
  }

@Override
  public void onLoadFinished(Loader<List<Record>> loader,
      List<Record> data) {
    mList = data;
    mFragmentCardAdapter =
        new FragmentCardAdapter(getContext(), mList);
    mFragmentCardAdapter.setOnRecordClickedListener(
        new FragmentCardAdapter.OnRecordClickedListener() {
          @Override
          public void onRecordClicked(long id) {
            getFragmentManager().beginTransaction()
                .replace(R.id.main_activity_content_frame, RecordFragment.newInstance(id))
                .addToBackStack("").commit();
          }
        });
    mStaggered.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);
    mRecyclerView.setLayoutManager(mStaggered);
    mRecyclerView.setAdapter(mFragmentCardAdapter);
  }

适配器:

代码语言:javascript
复制
public class FragmentCardAdapter extends RecyclerView.Adapter<FragmentCardHolder>{



private List<Record> mList;
  private Context mContext;
  private OnRecordClickedListener mRecordClickedListener;

  public FragmentCardAdapter(Context context, List<Record> list){
    mList = list;
    mContext = context;
  }

  public FragmentCardAdapter(Context context){
    mList = new ArrayList<>();
    mContext = context;
  }

  @Override
  public FragmentCardHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View layout = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_record, null);
    return new FragmentCardHolder(layout);
  }

  @Override
  public void onBindViewHolder(FragmentCardHolder holder, final int position) {
    String text = mList.get(position).getText().replace(' ', '\n');
    holder.mText.setText(text);
    holder.itemView.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        if(mRecordClickedListener != null){
          mRecordClickedListener.onRecordClicked(mList.get(position).getId());
        }
      }
    });
  }

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

  public void setOnRecordClickedListener(OnRecordClickedListener onRecordClickedListener){
    mRecordClickedListener = onRecordClickedListener;
  }

  public interface OnRecordClickedListener{
    void onRecordClicked(long id);
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-03 20:41:20

我双倍启动了装载机。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33361646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档