【问题标题】:Android - Calling RecyclerView in Fragment of Navigation DrawerAndroid - 在导航抽屉的片段中调用 RecyclerView
【发布时间】:2017-02-03 03:26:34
【问题描述】:

我的麻烦是当我想将RecyclerView 调用到NavigationDrawerFragment 和我通过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" />

帮帮我,提前谢谢。

【问题讨论】:

  • 尝试用 LinearLayoutManager 改变 GridLayoutManager
  • 将你的代码从onCreate()移动到onViewCreated()

标签: java android android-fragments android-recyclerview android-drawer


【解决方案1】:

你还没有初始化你的 recyclerView。

recyclerView = (RecyclerView) view.findViewById(R.id.your_id);

还将代码从 onCreate() 移到 onViewCreated();

【讨论】:

    【解决方案2】:

    如果你需要网格布局管理器,你可以试试这个

    GridLayoutManager layoutManager = new GridLayoutManager(this, 1);
    

    或者你可以像这样使用水平线性布局管理器

    LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
    

    或者你可以像这样使用垂直线性布局管理器

    LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
    

    【讨论】:

    • 它说不能应用到this
    【解决方案3】:
    final RecyclerView.LayoutManager mLayoutManager =new GridLayoutManager(getContext(), 1);
        recyclerView_drawer.setLayoutManager(mLayoutManager);
        recyclerView_drawer.setItemAnimator(new DefaultItemAnimator());
        recyclerView_drawer.setAdapter(drawerAdapter);
    

    希望这段代码对你有帮助。你也可以用相对布局替换框架布局,正如你在框架布局中所说的那样,它不起作用。

    【讨论】:

    • 但是 recyclerview_drawer 里有什么?
    • recyclerView_drawer 是我的 Recyclerview 对象,它是一个 recyclerView。
    【解决方案4】:

    你没有初始化你的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);
    }
    

    希望对您有所帮助.. 编码愉快 :)

    【讨论】:

      猜你喜欢
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      相关资源
      最近更新 更多