0

Mein Problem ist, wenn ich RecyclerView in Fragment von NavigationDrawer und Elementen (Arrays) anrufen mag, dass ich anrufen über RecyclerView nicht genannt, aber wenn ich nicht in Fragment platziere es könnte genannt . Also hier ist mein Code.Android - Aufruf RecyclerView in Fragmente der Navigationsleiste

Hier ist meine Fragment.java und es sagt, Fehler auf 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(); 

}} 

Hier ist mein 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> 

Hier ist meine Activity_calling.xml, die das Element in Array verwendet zu nennen (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" /> 

Helfen Sie mir Jungs, danke in Advanc e.

+0

versuchen GridLayoutManager mit LinearLayoutManager Ändern –

+0

Code von 'onCreate()' auf 'onViewCreated()' –

Antwort

2

Sie haben Ihre RecyclerView nicht initialisiert.

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

Verschieben Sie auch den Code von onCreate() zu onViewCreated();

+0

Vielen Dank, das ist perfekt funktioniert –

0

Wenn Sie Raster-Layout-Manager benötigen, können Sie diese ausprobieren

GridLayoutManager layoutManager = new GridLayoutManager(this, 1); 

Oder Sie können wie so

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

für einen horizontalen linearen Layout-Manager gehen Sie können auch für eine vertikale lineare Layout gehen Manager wie so

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

bewegen, sagt sie kann nicht in 'this' –

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

Ich hoffe, dieser Code wird Ihnen helfen. Sie können Frame-Layout mit Relatives Layout auch ersetzen, wie Sie im Frame-Layout gesagt haben, funktioniert es nicht.

+0

angewendet werden, sondern, was in der recyclerview_drawer ist? –

+0

recyclerView_drawer ist mein Recyclerview-Objekt für Sie ein RecyclerView. –

0

Sie nicht Ihren recyclerview initialisieren, die als getan werden kann:

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

Und Raster-Layout-Manager definieren als:

GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(), 2); 
    recyclerView .setHasFixedSize(true); 
    recyclerView .setItemAnimator(new DefaultItemAnimator()); 
    recyclerView .setLayoutManager(gridLayoutManager); 

Und ja Code von onCreate zu onViewCreated bewegen, wie:

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
} 

Hoffe es hilft .. Happy Coding :)