消失listView来自其他活动

时间:2019-12-11 06:05:51

标签: android listview

我的问题是listView在来自其他活动时消失,但是当我将其应用于具有ListView的页面时会出现,并且在更改活动并返回时再次消失。对于我的应用程序,我从MainAcivity页面开始,该页面可以通过使用按钮移至其他活动来进行选择。

MainActivity页面 v v v

package com.example.select_activity;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn1;
    private Button btn2;
    private Button btn3;
    private Button btn4;
    private Button btn5;
    TextView TV1;
// click alt + enter
    @Override
    protected void onResume() {
        super.onResume();
        setContentView(R.layout.activity_main);

        TV1 = (TextView) findViewById(R.id.TV1);
        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
        btn3 = (Button) findViewById(R.id.btn3);
        btn4 = (Button) findViewById(R.id.btn4);
        btn5 = (Button) findViewById(R.id.btn5);


        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
        btn4.setOnClickListener(this);
        btn5.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn1:
                openActivity2();
                break;
            case R.id.btn2:
                openActivity4();
                break;
            case R.id.btn3:
                openActivity3();
                break;
            case R.id.btn4:
                openActivity5();
                break;
            case R.id.btn5:
                openActivity6();
                break;


        }
        }

    public void openActivity2() {
        Intent intentProduce = new Intent(this, ForProducePage.class);
        startActivity(intentProduce);
    }
    public void openActivity3() {
        Intent intentLoan = new Intent(this, for_loan_page.class);
        startActivity(intentLoan);
        }
    public void openActivity4() {
        Intent intentReplace = new Intent(this, For_replace_page.class);
        startActivity(intentReplace);
    }
    public void openActivity5() {
        Intent intentSendBack = new Intent(this, Send_back.class);
        startActivity(intentSendBack);
        }
    public void openActivity6() {
        Intent intentUserInfo = new Intent(this, UserInfo.class);
        startActivity(intentUserInfo);
    }
    }

问题在这里发生。单击btn1后,移至包含列表视图的活动

package com.example.select_activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

import androidx.appcompat.app.AppCompatActivity;

import java.util.List;


public class ForProducePage extends AppCompatActivity {
    private Button back1btn;
    private ListView dataView;
    public MySQLConnect mySQLConnect;
    private List<String> items;


    @Override
    public void onResume() {
        super.onResume();
        setContentView(R.layout.activity_for_produce_page);
        init();
        update();
        back1btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openActivityback1();

            }
        });
    }


    public void update(){
        items = mySQLConnect.getData();
        dataView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items));
    }

    public void init() {
        back1btn = (Button) findViewById(R.id.back1btn);
        dataView = (ListView) findViewById(R.id.dataView);
        mySQLConnect = new MySQLConnect(ForProducePage.this);
    }


     public void openActivityback1(){
        Intent intentback1 = new Intent(this, MainActivity.class);
        startActivity(intentback1);

}}

使用来自此活动的数据

package com.example.select_activity;

import android.app.Activity;
import android.widget.Toast;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
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 MySQLConnect {

    public final Activity main;
    private List<String> list;
    private String URL = "http://10.0.2.2/", GET_URL = "senior/test1.php";



    public MySQLConnect(){
            main = null;
    }

    public MySQLConnect(Activity mainA){
        main = mainA;
        list = new ArrayList<String>();
    }

    public List<String> getData(){

        String url = URL + GET_URL;

        StringRequest stringRequest= new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                showJSON(response);
                Toast.makeText(main, list.get(0), Toast.LENGTH_LONG).show();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(main, error.getMessage().toString(), Toast.LENGTH_LONG). show();
            }
        }
        );

        RequestQueue requestQueue = Volley.newRequestQueue(main.getApplicationContext()) ;
        requestQueue.add(stringRequest);


        return list;
    }

    public void showJSON(String response){
        String Name = "";

        try{

            JSONObject jsonObject = new JSONObject(response);
            JSONArray result1 = jsonObject.getJSONArray("result1");

            for(int i =0; i<result1.length();i++){
                JSONObject collectData =result1.getJSONObject(i);
                Name = collectData.getString("Name");
                list.add(Name);
            }
        }catch (JSONException ex){ex.printStackTrace();}
    }
}

1 个答案:

答案 0 :(得分:0)

您在setContentView()内使用onResume()。这不是最佳实践。

  

onResume()与onCreate()多次调用,因此一遍又一遍地加载视图会浪费时间和内存。

     

由于活动onCreate()仅被调用一次,因此应该进行大多数初始化:调用setContentView(int)来膨胀活动的UI,使用findViewById与UI中的小部件进行编程交互。 / p>

因此,您应该在setContentView(R.layout.activity_for_produce_page);内使用init()onCreate()。如下所示。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_for_produce_page);
    init();
}