我的问题是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();}
}
}
答案 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();
}