簡體   English   中英

無法從其他活動調用 RecycleView

[英]Cannot call RecycleView from other activity

我的 RecycleView 在我的 Activity 中,然后我想在我的其他 class 中設置它。 但它總是用我的 RecycleView 說NullObjectReference 我不知道為什么,因為我已經初始化了它。 有什么不對? 這是我的代碼

我的活動

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

RecyclerView recyclerView;
VolleyGet volleyGet;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    initRecycle();
    volleyGet = new VolleyGet();
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(mLayoutManager);
    
    Button get = (Button) findViewById(R.id.get);
    get.setOnClickListener(this);

}

public void initRecycle(){
    recyclerView = findViewById(R.id.recycleview);
}

@Override
public void onClick(View v) {
    switch (v.getId()) {

        case R.id.get:
            volleyGet.volleyRequest(this);
            break;
            
        default:
            break;
    }
}

我的其他 Class (此處必須設置 RecycleView)

public class VolleyGet {
RecyclerView recyclerView;
public RecycleAdapter adapter;
public ArrayList<User> listUser;

public void volleyRequest(final Context context) {
    MainActivity mainActivity = new MainActivity();
    mainActivity.initRecycle();
    listUser = new ArrayList<>();
    adapter = new RecycleAdapter(context, listUser);
    
    String URL = "http://192.168.180.7:8080/get.php";
    RequestQueue queue = Volley.newRequestQueue(context);
    StringRequest stringRequest = new StringRequest(Request.Method.GET, URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONArray array = new JSONArray(response);
                        for (int i = 0; i < array.length(); i++) {
                            ArrayList<User> items = new Gson().fromJson(response.toString(), new TypeToken<ArrayList<User>>() {
                            }.getType());
                            listUser.clear();
                            listUser.addAll(items);
                        }
                        recyclerView.setAdapter(adapter);
                        
                    } catch (JSONException e) { e.printStackTrace(); } }},
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) { }}) {};
    queue.add(stringRequest);
}

看起來像調用方法的 RecycleView 初始化。 您可以嘗試使用其他方式進行初始化,例如像這樣使用 Activity。

Activity activity;

這如何讓你的活動

public VolleyGet(Activity _activity){
    this.activity = _activity;
    recyclerView = (RecyclerView) this.activity.findViewById(R.id.recycleview);
}

或者如果你想使用 Context 也可以這樣做

public VolleyGet(Context context){
    recyclerView = (RecyclerView) ((Activity)context).findViewById(R.id.recycleview);
}

不要忘記將其添加您的 MainActivity 以發送您的活動

volleyGet = new VolleyGet(this);

所以你的其他 class的整個代碼必須是這樣的

public class VolleyGet {
RecyclerView recyclerView;
public RecycleAdapter adapter;
public ArrayList<User> listUser;
Activity activity;

public VolleyGet(Activity _activity){
    this.activity = _activity;
    recyclerView = (RecyclerView) this.activity.findViewById(R.id.recycleview);
}

public void volleyRequest(final Context context) {
    listUser = new ArrayList<>();
    adapter = new RecycleAdapter(context, listUser);

    String URL = "http://192.168.180.7:8080/get.php";
    RequestQueue queue = Volley.newRequestQueue(context);
    StringRequest stringRequest = new StringRequest(Request.Method.GET, URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONArray array = new JSONArray(response);
                        for (int i = 0; i < array.length(); i++) {
                            ArrayList<User> items = new Gson().fromJson(response.toString(), new TypeToken<ArrayList<User>>() {
                            }.getType());
                            listUser.clear();
                            listUser.addAll(items);
                        }
                        recyclerView.setAdapter(adapter);

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM