问题描述
所以,我不能让RecyclerView生成定列表,一旦我把它上面的另一种观点。它和回收视图上面的观点都是一个的LinearLayout内这是一个NestedScrollView的独生子女(用于折叠工具栏)。一旦RecyclerView是在片段一切只能查看按预期工作。
StocksCompleteListFragment.java
公共类StocksCompleteListFragment扩展片段{ @Nullable
@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,捆绑savedInstanceState){
NestedScrollView SV =(NestedScrollView)inflater.inflate(
R.layout.fragment_stocks_completelist,集装箱,FALSE);
的LinearLayout MYLINEAR =(的LinearLayout)sv.findViewById(R.id.mainLinear);
RecyclerView RV =(RecyclerView)mylinear.findViewById(R.id.recyclerview);
如果(RV == NULL){
Toast.makeText(getActivity(),空,Toast.LENGTH_SHORT).show();
}
SETU precyclerView(RV);
返回SV;
} 私人无效SETU precyclerView(RecyclerView recyclerView){
recyclerView.setLayoutManager(新LinearLayoutManager(recyclerView.getContext()));
recyclerView.setAdapter(新SimpleStringRecyclerViewAdapter(getActivity(),
getRandomSublist(Cheeses.sCheeseStrings,30)));
} 私人列表<串GT; getRandomSublist(String []数组,INT量){
ArrayList的<串GT;名单=新的ArrayList<>(量);
随机随机=新的随机();
而(则为list.size()&下;量){
list.add(数组[random.nextInt(array.length)]);
}
返回列表;
} 公共静态类SimpleStringRecyclerViewAdapter
扩展RecyclerView.Adapter< SimpleStringRecyclerViewAdapter.ViewHolder> { 私人最终的TypedValue mTypedValue =新的TypedValue();
私人诠释mBackground;
私人列表<串GT; mValues; 公共静态类ViewHolder扩展RecyclerView.ViewHolder {
公共字符串mBoundString; 公众最终视图MView的;
公众最终ImageView的mImageView;
公众最终的TextView mTextView; 公共ViewHolder(查看视图){
超(视图);
MVIEW =视图。
mImageView =(ImageView的)view.findViewById(R.id.avatar);
mTextView =(TextView中)view.findViewById(android.R.id.text1);
} @覆盖
公共字符串的toString(){
返回super.toString调用()+'+ mTextView.getText();
}
} 公共字符串getValueAt(INT位置){
返回mValues.get(位置);
} 公共SimpleStringRecyclerViewAdapter(上下文的背景下,列表与LT;弦乐>项目){
。context.getTheme()resolveAttribute(R.attr.selectableItemBackground,mTypedValue,真正的);
mBackground = mTypedValue.resourceId;
mValues =物品;
} @覆盖
公共ViewHolder onCreateViewHolder(ViewGroup中的父母,INT viewType){
查看查看= LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item,父母,假);
view.setBackgroundResource(mBackground);
返回新ViewHolder(视图);
} @覆盖
公共无效onBindViewHolder(最终ViewHolder持有人,INT位置){
holder.mBoundString = mValues.get(位置);
holder.mTextView.setText(mValues.get(位置)); holder.mView.setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(视图v){
上下文的背景下= v.getContext();
意向意图=新意图(背景下,CheeseDetailActivity.class);
intent.putExtra(CheeseDetailActivity.EXTRA_NAME,holder.mBoundString); context.startActivity(意向);
}
}); Glide.with(holder.mImageView.getContext())
.load(Cheeses.getRandomCheeseDrawable())
.fitCenter()
.into(holder.mImageView);
} @覆盖
公众诠释getItemCount(){
返回mValues.size();
}
}
}
和这里的布局XML fragment_stocks_completelist.xml:
<?XML版本=1.0编码=UTF-8&GT?;
< android.support.v4.widget.NestedScrollView
的xmlns:机器人=http://schemas.android.com/apk/res/android
的xmlns:程序=http://schemas.android.com/apk/res-auto
机器人:layout_width =match_parent
机器人:layout_height =match_parent
应用:layout_behavior =@字符串/ appbar_scrolling_view_behavior> <的LinearLayout
机器人:ID =@ + ID / mainLinear
机器人:layout_width =match_parent
机器人:layout_height =match_parent
机器人:方向=垂直> <的LinearLayout
机器人:ID =@ + ID / progressBarLayout
机器人:layout_width =match_parent
机器人:layout_height =WRAP_CONTENT
机器人:layout_gravity =center_vertical
机器人:layout_marginBottom =4DP
机器人:layout_marginTop =8DP
机器人:背景=@彩色/ grayBackground
机器人:重力=center_vertical | CENTER_HORIZONTAL
机器人:填充=4DP
机器人:知名度=水涨船高> <进度
机器人:ID =@ + ID / progressBar1
风格=机器人:ATTR / progressBarStyle
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT/> < / LinearLayout中> < android.support.v7.widget.RecyclerView
机器人:ID =@ + ID / recyclerview
机器人:layout_width =match_parent
机器人:layout_height =WRAP_CONTENT/> < / LinearLayout中>< /android.support.v4.widget.NestedScrollView>
您需要设置
的android:fillViewport =真
您NestedRecyclerView。如果你把它放到 CoordinatorLayout
则还可以指定行为(你已经做了)
So I cannot make the RecyclerView generate the given list once I have another view above it. The view above it and the recycler view are both within a LinearLayout and which is the single child of a NestedScrollView (used for collapsing the toolbar). Once RecyclerView is the only view in the fragment everything works as expected.
StocksCompleteListFragment.java
public class StocksCompleteListFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
NestedScrollView sv = (NestedScrollView) inflater.inflate(
R.layout.fragment_stocks_completelist, container, false);
LinearLayout mylinear = (LinearLayout) sv.findViewById(R.id.mainLinear);
RecyclerView rv = (RecyclerView) mylinear.findViewById(R.id.recyclerview);
if (rv == null){
Toast.makeText(getActivity(),"Null", Toast.LENGTH_SHORT).show();
}
setupRecyclerView(rv);
return sv;
}
private void setupRecyclerView(RecyclerView recyclerView) {
recyclerView.setLayoutManager(new LinearLayoutManager(recyclerView.getContext()));
recyclerView.setAdapter(new SimpleStringRecyclerViewAdapter(getActivity(),
getRandomSublist(Cheeses.sCheeseStrings, 30)));
}
private List<String> getRandomSublist(String[] array, int amount) {
ArrayList<String> list = new ArrayList<>(amount);
Random random = new Random();
while (list.size() < amount) {
list.add(array[random.nextInt(array.length)]);
}
return list;
}
public static class SimpleStringRecyclerViewAdapter
extends RecyclerView.Adapter<SimpleStringRecyclerViewAdapter.ViewHolder> {
private final TypedValue mTypedValue = new TypedValue();
private int mBackground;
private List<String> mValues;
public static class ViewHolder extends RecyclerView.ViewHolder {
public String mBoundString;
public final View mView;
public final ImageView mImageView;
public final TextView mTextView;
public ViewHolder(View view) {
super(view);
mView = view;
mImageView = (ImageView) view.findViewById(R.id.avatar);
mTextView = (TextView) view.findViewById(android.R.id.text1);
}
@Override
public String toString() {
return super.toString() + " '" + mTextView.getText();
}
}
public String getValueAt(int position) {
return mValues.get(position);
}
public SimpleStringRecyclerViewAdapter(Context context, List<String> items) {
context.getTheme().resolveAttribute(R.attr.selectableItemBackground, mTypedValue, true);
mBackground = mTypedValue.resourceId;
mValues = items;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item, parent, false);
view.setBackgroundResource(mBackground);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.mBoundString = mValues.get(position);
holder.mTextView.setText(mValues.get(position));
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context = v.getContext();
Intent intent = new Intent(context, CheeseDetailActivity.class);
intent.putExtra(CheeseDetailActivity.EXTRA_NAME, holder.mBoundString);
context.startActivity(intent);
}
});
Glide.with(holder.mImageView.getContext())
.load(Cheeses.getRandomCheeseDrawable())
.fitCenter()
.into(holder.mImageView);
}
@Override
public int getItemCount() {
return mValues.size();
}
}
}
And here's the layout xml fragment_stocks_completelist.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:id="@+id/mainLinear"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/progressBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginBottom="4dp"
android:layout_marginTop="8dp"
android:background="@color/grayBackground"
android:gravity="center_vertical|center_horizontal"
android:padding="4dp"
android:visibility="gone">
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
You need to set
android:fillViewport="true"
on your NestedRecyclerView. If you put it into the CoordinatorLayout
then also specify the behavior (which you've already done)
这篇关于RecyclerView不会产生列表时,它有它上面的观点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!