0

Моя беда в том, когда я хочу назвать RecyclerView в Fragment из NavigationDrawer и предметы (массивы), которые я называю через RecyclerView не называется, но, когда я не ставлю в Fragment его можно назвать , Итак, вот мой код.Android - Вызов 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" /> 

Помогите мне, ребята, спасибо заранее.

+0

попробуйте изменить GridLayoutManager с LinearLayoutManager –

+0

переместите свой код с 'onCreate()' на 'onViewCreated()' –

ответ

2

Вы не инициализировали свой recyclerView.

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

Также переместите код с onCreate() на onViewCreated();

+0

Большое спасибо, это отлично работает –

0

Если вам нужен менеджер компоновки сетки вы можете попробовать это

GridLayoutManager layoutManager = new GridLayoutManager(this, 1); 

Или вы можете пойти для горизонтального менеджера линейной компоновки, как так

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

Или вы можете пойти на вертикальную линейную компоновку менеджер как так

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

, он говорит, что он не может быть применен в 'this' –

0
final RecyclerView.LayoutManager mLayoutManager =new GridLayoutManager(getContext(), 1); 
    recyclerView_drawer.setLayoutManager(mLayoutManager); 
    recyclerView_drawer.setItemAnimator(new DefaultItemAnimator()); 
    recyclerView_drawer.setAdapter(drawerAdapter); 

Надеюсь, этот код поможет вам. Вы также можете заменить рамочную компоновку на Relative Layout, как вы сказали в макете кадра, что он не работает.

+0

, но что находится в recyclerview_drawer? –

+0

recyclerView_drawer - это мой объект Recyclerview, для вас это recyclerView. –

0

Вы не инициализирует свой 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); 
} 

Надеюсь, это поможет .. счастливое кодирование :)