Erfan
Erfan

Reputation: 3353

fragment not work and have errors

have app get image and text from server then show that in card view enter image description here and have another app with different tabs and which tab extend from Fragment enter image description here

so want put my first app in which one of second app tabs . like this : enter image description here

so paste my main activity code from first app in fragment but have errors :

public class news extends Fragment {

    private RecyclerView recyclerView;
    private ArrayList<Deatails> data;
    private DataAdapter adapter;


    private View myFragmentView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    myFragmentView= inflater.inflate(R.layout.news, container, false);
      initViews();
    return myFragmentView;
}

    private void initViews() {

        recyclerView = (RecyclerView)myFragmentView.findViewById(R.id.card_recycler_view);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(layoutManager);
        loadJSON();
    }

    private void loadJSON() {

            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("http://memaraneha.ir/")
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
            RequestInterface request = retrofit.create(RequestInterface.class);
            Call<JSONResponse> call = request.getJSON();

            final ProgressDialog progressDialog = new ProgressDialog(this);
            progressDialog.show();

            call.enqueue(new Callback<JSONResponse>() {
                @Override
                public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
                    progressDialog.dismiss();

                    JSONResponse jsonResponse = response.body();
                    data = new ArrayList<>(Arrays.asList(jsonResponse.getAndroid()));
                    adapter = new DataAdapter(MainActivity.this, data);
                    recyclerView.setAdapter(adapter);
                }

                @Override
                public void onFailure(Call<JSONResponse> call, Throwable t) {
                    progressDialog.dismiss();
                    Log.d("Error", t.getMessage());
                }
            });
    }
}

this is my errors :

enter image description here

,,,,

enter image description here

,,,,

enter image description here

Upvotes: 0

Views: 110

Answers (3)

Erfan
Erfan

Reputation: 3353

i solve my problems so its correct code for people :

public class news extends Fragment {

    private RecyclerView recyclerView;
    private ArrayList<Deatails> data;
    private DataAdapter adapter;
    private View myFragmentView;



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


        myFragmentView= inflater.inflate(R.layout.news, container, false);
        initViews();
        return myFragmentView;
    }

    private void initViews() {

        recyclerView = (RecyclerView)myFragmentView.findViewById(R.id.card_recycler_view);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity().getApplicationContext());
        recyclerView.setLayoutManager(layoutManager);
        loadJSON();
    }

    private void loadJSON() {

            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("http://memaraneha.ir/")
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
            RequestInterface request = retrofit.create(RequestInterface.class);
            Call<JSONResponse> call = request.getJSON();

            final ProgressDialog progressDialog = new ProgressDialog(getActivity());
            progressDialog.show();

            call.enqueue(new Callback<JSONResponse>() {
                @Override
                public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
                    progressDialog.dismiss();

                    JSONResponse jsonResponse = response.body();
                    data = new ArrayList<>(Arrays.asList(jsonResponse.getAndroid()));
                    adapter = new DataAdapter(getActivity(), data);
                    recyclerView.setAdapter(adapter);
                }

                @Override
                public void onFailure(Call<JSONResponse> call, Throwable t) {
                    progressDialog.dismiss();
                    Log.d("Error", t.getMessage());
                }
            });
    }
}

Upvotes: 0

Andrey Danilov
Andrey Danilov

Reputation: 6602

You should use link to View inside your Fragment.

Inside Fragment

private View myFragmentView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    myFragmentView = inflater.inflate(R.layout.news, container, false);
    return myFragmentView;
}

You cannot just copy paste code from your activity to your fragment. You need to launch findViewById from your fragment view.

myFragmentView.findViewById(R.id.addYourViewHere);

You cannot run init methods before OnCreateView method of your fragment.

Upvotes: 1

ArtemNeFRiT
ArtemNeFRiT

Reputation: 238

When you are using fragment, u have to override it's onCreateView method.

Example:

public class FavFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_favorite, container, false);

    mRecyclerView = (RecyclerView) v.findViewById(R.id.my_recycler_view);
    layoutEmpty = (RelativeLayout) v.findViewById(R.id.layoutEmpty);
    btnShowOnMap = (FloatingActionButton) v.findViewById(R.id.btnShowOnMap);
    fabRoulette = (FloatingActionButton) v.findViewById(R.id.fabRoulette);
    mainView = v.findViewById(R.id.mainView);


    return v;
}

Upvotes: 1

Related Questions