gpt4 book ai didi

android - RecyclerView 直到滚动后才显示

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:54:11 28 4
gpt4 key购买 nike

我有一个回收器 View ,在我滚动它之前不会显示任何元素。一旦我滚动它,任何已经完全离开屏幕的项目都会显示,但任何没有出现的都不会。

fragment 类:

public class ImageAndNavHeaderFragment extends Fragment {
private NetworkImageView mBackgroundImage;
private RecyclerView mScrollingTextNavBar;
private ScrollingTextNavBarAdapter mScrollingBarAdapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.image_and_nav_header, container, false);
mBackgroundImage = (NetworkImageView) view.findViewById(R.id.bgImage);
mBackgroundImage.setImageUrl("http://crookedcreekguides.com/wp-content/uploads/2016/01/dinner-03.jpg", VolleySingleton.getInstance(getContext()).getImageLoader());
mScrollingTextNavBar = (RecyclerView) view.findViewById(R.id.scrollTextNavBar);


LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
mScrollingTextNavBar.setLayoutManager(layoutManager);


ArrayList<String> list = new ArrayList<>();
for(int i=0; i< 20; i++) {
list.add("Test " + i);
}

mScrollingBarAdapter = new ScrollingTextNavBarAdapter(getContext(), list);
mScrollingTextNavBar.setAdapter(mScrollingBarAdapter);
view.invalidate();
return view;
}
}

适配器

public class ScrollingTextNavBarAdapter  extends RecyclerView.Adapter<ScrollingTextNavBarAdapter.ViewHolder>{
private List<String> mStrings;
private int mSelectedIndex = 0;
private int mSelectedColor;
private int mDefaultColor;
private ItemClickedListener mListener;
private Drawable mSelectedDrawable;

private class PositionClickListener implements View.OnClickListener{
private int mPosition;
public PositionClickListener() {
}

@Override
public void onClick(View view){
if(mPosition != mSelectedIndex) {
mSelectedIndex = mPosition;
notifyDataSetChanged();
if(mListener != null) {
mListener.onClick(mPosition);
}
}
}

public void setPosition(int position) {
mPosition = position;
}
}

public class ViewHolder extends RecyclerView.ViewHolder {
public TextView textView;
public PositionClickListener listener;
public ViewHolder(TextView view) {
super(view);
textView = view;
listener = new PositionClickListener();
}
}

public ScrollingTextNavBarAdapter(Context context) {
mStrings = new ArrayList<>();
init(context);
}

public ScrollingTextNavBarAdapter(Context context, List<String> items) {
mStrings = items;
init(context);
}

@SuppressWarnings( "deprecation" )
private void init(Context context){
mSelectedColor = context.getResources().getColor(R.color.scrolling_text_nav_bar_text_selected_color);
mDefaultColor = context.getResources().getColor(R.color.scrolling_text_nav_bar_text_default_color);
mSelectedDrawable = context.getResources().getDrawable(R.drawable.scrolling_text_nav_bar_seected_drawable);
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
TextView view = (TextView)LayoutInflater.from(parent.getContext()).inflate(R.layout.scrolling_text_nav_bar_item, parent, false);
return new ViewHolder(view);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.textView.setText(mStrings.get(position));
holder.textView.setTextColor(position == mSelectedIndex ? mSelectedColor : mDefaultColor);
holder.listener.setPosition(position);
holder.textView.setOnClickListener(holder.listener);
holder.textView.setBackground(position == mSelectedIndex? mSelectedDrawable : null);
}

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

public void addString(String text) {
mStrings.add(text);
notifyDataSetChanged();
}

public void setItemClickedListener(ItemClickedListener listener) {
mListener = listener;
}

}

fragment xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/bgImage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<android.support.v7.widget.RecyclerView
android:id="@+id/scrollTextNavBar"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_alignBottom="@id/bgImage"
/>
</RelativeLayout>

进一步娱乐 - 在我将一个项目滚动到 View 中并出现后,单击一个(调用 notifyDataSetChanged)将显示所有项目。但是在不滚动的情况下调用它(即使有延迟)也不会修复它。

最佳答案

事实证明,我在 RecyclerView 中的元素需要一个固定的高度才能工作。将该高度设置为 40dp 会使 View 按预期工作。

关于android - RecyclerView 直到滚动后才显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37284525/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com