Java 如何在片段中而不是在活动中使用setContentView

Java 如何在片段中而不是在活动中使用setContentView,java,android,android-fragments,setcontentview,Java,Android,Android Fragments,Setcontentview,亲爱的飞越者:) AllAssetsFragment从Main活动打开。在这个片段中,我无法正确设置setContentView()和getApplicationContext() 我知道有点不对劲。一些代码适用于正常的活动,但在此片段中它们不起作用 AllAssetsFragment: import android.content.Intent; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivit

亲爱的飞越者:)

AllAssetsFragment
从Main活动打开。在这个片段中,我无法正确设置
setContentView()
getApplicationContext()

我知道有点不对劲。一些代码适用于正常的活动,但在此片段中它们不起作用


AllAssetsFragment:

import android.content.Intent;
import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.room.Room;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;


public class AllAssetsFragment extends Fragment {

    public AllAssetsFragment(){


    }


    private static final String HI = "https://uniqueandrocode.000webhostapp.com/hiren/favouritelist.php";
    private List<AssetsItem>assetsItems;
    private RecyclerView recyclerView;
    AssetsAdapter adapter;

    private JsonArrayRequest request;
    private RequestQueue requestQueue;
    public static FavoritesDatabase favoritesDatabase;
    Button btn;

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

        return inflater.inflate(R.layout.fragment_allassets, container, false);


        recyclerView = (RecyclerView)getView().findViewById(R.id.recyclerview);
        recyclerView.setHasFixedSize(true);
        // +++ PROBLEM 1: Context doesn't work (same on Problem 3 and 4) +++
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        assetsItems = new ArrayList<>();
        btn=(Button)getView().findViewById(R.id.favbtn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // +++ PROBLEM 2: This code doesn't work to open Fragment from Fragment +++
                startActivity(new Intent(AllAssetsFragment.this, FavoritesFragment.class));
            }


        });
        favoritesDatabase = Room.databaseBuilder(getActivity().getApplicationContext(), FavoritesDatabase.class, "myfavdb").allowMainThreadQueries().build();
        getData();

    }

    private void getData() {
        request = new JsonArrayRequest(HI, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                JSONObject jsonObject = null;
                for (int i = 0; i < response.length(); i++) {
                    try {
                        JSONObject ob = response.getJSONObject(i);
                        AssetsItem pr = new AssetsItem(ob.getInt("id"),
                                ob.getString("product_name"),
                                ob.getString("product_img"));
                        assetsItems.add(pr);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
                setupData(assetsItems);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });

        // +++ PROBLEM 3: Context doesn't work +++
        requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(request);
    }

    private void setupData(List<AssetsItem>assetsItems){
    adapter=new AssetsAdapter(assetsItems,getActivity().getApplicationContext());
    recyclerView.setAdapter(adapter);
    }
}


import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.List;


/**
 * A simple {@link Fragment} subclass.
 */
public class FavoritesFragment extends Fragment {


    public FavoritesFragment() {

    }

    private RecyclerView rv;
    private FavoritesAdapter adapter;

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

        return inflater.inflate(R.layout.fragment_favorites, container, false);

        rv=(RecyclerView)getView().findViewById(R.id.rec);
        rv.setHasFixedSize(true);
        // +++ PROBLEM 4: doesn't work +++
        rv.setLayoutManager(new LinearLayoutManager(this));

        getFavData();
    }

    private void getFavData(){
        List<FavoritesItem>favoritesItems=AllAssetsFragment.favoritesDatabase.favoritesDao().getFavoritesData();

        adapter = new FavoritesAdapter(favoritesItems,getActivity().getApplicationContext());
        rv.setAdapter(adapter);
    }



}
导入android.content.Intent;
导入android.os.Bundle;
导入androidx.appcompat.app.appcompat活动;
导入androidx.fragment.app.fragment;
导入androidx.recyclerview.widget.LinearLayoutManager;
导入androidx.recyclerview.widget.recyclerview;
导入androidx.room.room;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.Button;
导入com.android.volley.RequestQueue;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.JsonArrayRequest;
导入com.android.volley.toolbox.volley;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.ArrayList;
导入java.util.List;
公共类AllAssetsFragment扩展了片段{
公共AllAssetsFragment(){
}
私有静态最终字符串HI=”https://uniqueandrocode.000webhostapp.com/hiren/favouritelist.php";
私人上市资产项目;
私人回收站;
资产适配器;
私有JsonArrayRequest请求;
私有请求队列请求队列;
公共静态收藏夹数据库收藏夹数据库;
按钮btn;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
返回充气机。充气(R.layout.fragment_allassets,容器,假);
RecycleView=(RecycleView)getView().findViewById(R.id.RecycleView);
recyclerView.setHasFixedSize(true);
//+++问题1:上下文不起作用(与问题3和4相同)+++
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
assetsItems=新的ArrayList();
btn=(按钮)getView().findViewById(R.id.favbtn);
btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//+++问题2:此代码无法从片段中打开片段+++
startActivity(新意图(AllAssetsFragment.this,FavoritesFragment.class));
}
});
favoritesDatabase=Room.databaseBuilder(getActivity().getApplicationContext(),favoritesDatabase.class,“myfavdb”).allowMainThreadQueries().build();
getData();
}
私有void getData(){
request=newjsonarrayrequest(嗨,newresponse.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
JSONObject JSONObject=null;
对于(int i=0;i
这里是我们的第二个片段:FavoritesFragment:

import android.content.Intent;
import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.room.Room;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;


public class AllAssetsFragment extends Fragment {

    public AllAssetsFragment(){


    }


    private static final String HI = "https://uniqueandrocode.000webhostapp.com/hiren/favouritelist.php";
    private List<AssetsItem>assetsItems;
    private RecyclerView recyclerView;
    AssetsAdapter adapter;

    private JsonArrayRequest request;
    private RequestQueue requestQueue;
    public static FavoritesDatabase favoritesDatabase;
    Button btn;

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

        return inflater.inflate(R.layout.fragment_allassets, container, false);


        recyclerView = (RecyclerView)getView().findViewById(R.id.recyclerview);
        recyclerView.setHasFixedSize(true);
        // +++ PROBLEM 1: Context doesn't work (same on Problem 3 and 4) +++
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        assetsItems = new ArrayList<>();
        btn=(Button)getView().findViewById(R.id.favbtn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // +++ PROBLEM 2: This code doesn't work to open Fragment from Fragment +++
                startActivity(new Intent(AllAssetsFragment.this, FavoritesFragment.class));
            }


        });
        favoritesDatabase = Room.databaseBuilder(getActivity().getApplicationContext(), FavoritesDatabase.class, "myfavdb").allowMainThreadQueries().build();
        getData();

    }

    private void getData() {
        request = new JsonArrayRequest(HI, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                JSONObject jsonObject = null;
                for (int i = 0; i < response.length(); i++) {
                    try {
                        JSONObject ob = response.getJSONObject(i);
                        AssetsItem pr = new AssetsItem(ob.getInt("id"),
                                ob.getString("product_name"),
                                ob.getString("product_img"));
                        assetsItems.add(pr);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
                setupData(assetsItems);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });

        // +++ PROBLEM 3: Context doesn't work +++
        requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(request);
    }

    private void setupData(List<AssetsItem>assetsItems){
    adapter=new AssetsAdapter(assetsItems,getActivity().getApplicationContext());
    recyclerView.setAdapter(adapter);
    }
}


import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.List;


/**
 * A simple {@link Fragment} subclass.
 */
public class FavoritesFragment extends Fragment {


    public FavoritesFragment() {

    }

    private RecyclerView rv;
    private FavoritesAdapter adapter;

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

        return inflater.inflate(R.layout.fragment_favorites, container, false);

        rv=(RecyclerView)getView().findViewById(R.id.rec);
        rv.setHasFixedSize(true);
        // +++ PROBLEM 4: doesn't work +++
        rv.setLayoutManager(new LinearLayoutManager(this));

        getFavData();
    }

    private void getFavData(){
        List<FavoritesItem>favoritesItems=AllAssetsFragment.favoritesDatabase.favoritesDao().getFavoritesData();

        adapter = new FavoritesAdapter(favoritesItems,getActivity().getApplicationContext());
        rv.setAdapter(adapter);
    }



}

导入android.os.Bundle;
导入androidx.appcompat.app.appcompat活动;
导入androidx.fragment.app.fragment;
导入androidx.recyclerview.widget.LinearLayoutManager;
导入androidx.recyclerview.widget.recyclerview;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入java.util.List;
/**
*一个简单的{@link Fragment}子类。
*/
公共类FavoritesFragment扩展了片段{
公共偏好片段(){
}
私人回收车;
专用收藏夹适配器;
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
返回充气机。充气(R.layout.fragment\u收藏夹,容器,假);
rv=(RecyclerView)getView().findviewbyd(R.id.rec);
rv.setHasFixedSize(真);
//+++问题4:不起作用+++
rv.setLayoutManager(新直线布局经理(本));
getFavData();
}
私有void getFavData(){
ListfavoritesItems=AllAssetsFragment.favoritesDatabase.favoritesDao().getFavoritesData();
适配器=新的FavoritesAdapter(favoritesItems,getActivity().getApplicationContext());
rv.设置适配器(适配器);
}
}

您不需要在片段中调用
setContentView
,您需要在
onCreateView
方法中返回视图。你已经做了

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_allassets, container, false);
}
对于
getApplicationContext
您需要调用
getActivity()

像这样


getActivity().getApplicationContext()
您不需要在
onCreateView
方法中调用
setContentView
片段中的返回视图。你已经做了

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_allassets, container, false);
}
对于
getApplicationContext
您需要调用
getActivity()

像这样

getActivity().getApplicationContext()
不要使用

FragmentTransaction transaction = getActivity().getFragmentManager().beginTransaction();
transaction.replace(R.id.container, new AllAssetsFragment());
transaction.commit();