Android - 在导航抽屉的片段中调用 RecyclerView
Android - Calling RecyclerView in Fragment of Navigation Drawer
我的麻烦是当我想将 RecyclerView
调用到 NavigationDrawer
的 Fragment
和我通过 RecyclerView
调用的项目(数组)时未调用,但是当我不要输入 Fragment
它可以被调用。所以这是我的代码。
这是我的 Fragment.java
,它说 recyclerView.setLayoutManager(layoutManager);
出错
public class fragment_1bakso extends Fragment {
private AppCompatActivity compat;
private RecyclerView recyclerView;
private MakananAdapter adapter;
public fragment_1bakso() {
// Required empty public constructor
}
ArrayList<Makanan> mList = new ArrayList<>();
MakananAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
/*View v = inflater.inflate(R.layout.fragment_1bakso, container, false);
return v;*/
View rootview = inflater.inflate(R.layout.activity_calling, container, false);
return rootview;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//mClass.setContentView(R.layout.activity_calling);
//return new fragment_1bakso(R.layout.activity_calling, this);
GridLayoutManager layoutManager = new GridLayoutManager(getActivity(), 2, GridLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(layoutManager);
mAdapter = new MakananAdapter(mList);
recyclerView.setAdapter(mAdapter);
fillData();
}
private void fillData() {
Resources resources = getResources();
String [] arJudul = resources.getStringArray(R.array.bakso);
String [] arHarga = resources.getStringArray(R.array.bakso_price);
String [] arDeskripsi = resources.getStringArray(R.array.bakso_desc);
String [] arLokasi = resources.getStringArray(R.array.bakso_locations);
String [] arDetail = resources.getStringArray(R.array.bakso_details);
TypedArray a = resources.obtainTypedArray(R.array.bakso_pict);
Drawable[] arFoto = new Drawable[a.length()];
for (int i = 0; i < arFoto.length; i++)
{
arFoto[i] = a.getDrawable(i);
}
a.recycle();
for (int i = 0; i < arJudul.length; i++)
{
mList.add(new Makanan(arJudul[i],arHarga[i],arFoto[i],arDeskripsi[i],arDetail[i],arLokasi[i]));
}
mAdapter.notifyDataSetChanged();
}}
这是我的Fragment.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="id.sch.smktelkom_mlg.learn.sideview.fragment_1bakso">
<!-- TODO: Update blank fragment layout -->
<include
layout="@layout/activity_calling"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
这是我的 Activity_calling.xml
用来调用数组中的项目 (RecyclerView)
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:scrollbars="vertical"
tools:context="id.sch.smktelkom_mlg.learn.sideview.activity_1bakso" />
帮帮我,先谢谢了。
如果你需要网格布局管理器,你可以试试这个
GridLayoutManager layoutManager = new GridLayoutManager(this, 1);
或者您可以像这样使用水平线性布局管理器
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
或者您可以像这样使用垂直线性布局管理器
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
final RecyclerView.LayoutManager mLayoutManager =new GridLayoutManager(getContext(), 1);
recyclerView_drawer.setLayoutManager(mLayoutManager);
recyclerView_drawer.setItemAnimator(new DefaultItemAnimator());
recyclerView_drawer.setAdapter(drawerAdapter);
希望这段代码对您有所帮助 you.you 也可以用相对布局替换框架布局,正如您在框架布局中所说的那样,它不起作用。
你还没有初始化你的recyclerView。
recyclerView = (RecyclerView) view.findViewById(R.id.your_id);
同时将代码从 onCreate() 移至 onViewCreated();
您没有初始化您的 recyclerview,这可以通过以下方式完成:
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
并将网格布局管理器定义为:
GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(), 2);
recyclerView .setHasFixedSize(true);
recyclerView .setItemAnimator(new DefaultItemAnimator());
recyclerView .setLayoutManager(gridLayoutManager);
是的,将您的代码从 onCreate 移至 onViewCreated 为:
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
希望对您有所帮助..编码愉快:)
我的麻烦是当我想将 RecyclerView
调用到 NavigationDrawer
的 Fragment
和我通过 RecyclerView
调用的项目(数组)时未调用,但是当我不要输入 Fragment
它可以被调用。所以这是我的代码。
这是我的 Fragment.java
,它说 recyclerView.setLayoutManager(layoutManager);
public class fragment_1bakso extends Fragment {
private AppCompatActivity compat;
private RecyclerView recyclerView;
private MakananAdapter adapter;
public fragment_1bakso() {
// Required empty public constructor
}
ArrayList<Makanan> mList = new ArrayList<>();
MakananAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
/*View v = inflater.inflate(R.layout.fragment_1bakso, container, false);
return v;*/
View rootview = inflater.inflate(R.layout.activity_calling, container, false);
return rootview;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//mClass.setContentView(R.layout.activity_calling);
//return new fragment_1bakso(R.layout.activity_calling, this);
GridLayoutManager layoutManager = new GridLayoutManager(getActivity(), 2, GridLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(layoutManager);
mAdapter = new MakananAdapter(mList);
recyclerView.setAdapter(mAdapter);
fillData();
}
private void fillData() {
Resources resources = getResources();
String [] arJudul = resources.getStringArray(R.array.bakso);
String [] arHarga = resources.getStringArray(R.array.bakso_price);
String [] arDeskripsi = resources.getStringArray(R.array.bakso_desc);
String [] arLokasi = resources.getStringArray(R.array.bakso_locations);
String [] arDetail = resources.getStringArray(R.array.bakso_details);
TypedArray a = resources.obtainTypedArray(R.array.bakso_pict);
Drawable[] arFoto = new Drawable[a.length()];
for (int i = 0; i < arFoto.length; i++)
{
arFoto[i] = a.getDrawable(i);
}
a.recycle();
for (int i = 0; i < arJudul.length; i++)
{
mList.add(new Makanan(arJudul[i],arHarga[i],arFoto[i],arDeskripsi[i],arDetail[i],arLokasi[i]));
}
mAdapter.notifyDataSetChanged();
}}
这是我的Fragment.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="id.sch.smktelkom_mlg.learn.sideview.fragment_1bakso">
<!-- TODO: Update blank fragment layout -->
<include
layout="@layout/activity_calling"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
这是我的 Activity_calling.xml
用来调用数组中的项目 (RecyclerView)
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:scrollbars="vertical"
tools:context="id.sch.smktelkom_mlg.learn.sideview.activity_1bakso" />
帮帮我,先谢谢了。
如果你需要网格布局管理器,你可以试试这个
GridLayoutManager layoutManager = new GridLayoutManager(this, 1);
或者您可以像这样使用水平线性布局管理器
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
或者您可以像这样使用垂直线性布局管理器
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
final RecyclerView.LayoutManager mLayoutManager =new GridLayoutManager(getContext(), 1);
recyclerView_drawer.setLayoutManager(mLayoutManager);
recyclerView_drawer.setItemAnimator(new DefaultItemAnimator());
recyclerView_drawer.setAdapter(drawerAdapter);
希望这段代码对您有所帮助 you.you 也可以用相对布局替换框架布局,正如您在框架布局中所说的那样,它不起作用。
你还没有初始化你的recyclerView。
recyclerView = (RecyclerView) view.findViewById(R.id.your_id);
同时将代码从 onCreate() 移至 onViewCreated();
您没有初始化您的 recyclerview,这可以通过以下方式完成:
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
并将网格布局管理器定义为:
GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(), 2);
recyclerView .setHasFixedSize(true);
recyclerView .setItemAnimator(new DefaultItemAnimator());
recyclerView .setLayoutManager(gridLayoutManager);
是的,将您的代码从 onCreate 移至 onViewCreated 为:
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
希望对您有所帮助..编码愉快:)