按下后退按钮后,之前的活动(listview)是emtpty

时间:2018-02-01 13:30:41

标签: android listview

在我的android项目中,我有一个listview,其中包含从在线数据库加载的项目。当我点击一个项目时,我会转到另一个类,我可以删除或更新它。我的问题是,当我按下后退按钮时,我的列表视图为空。我试图onBackPressed意图转到之前的活动,但它又是空的。我想从单击的项目重新加载我的列表视图我按下后退按钮。以下是我的代码。  列表视图:

public class AllStudents extends AppCompatActivity {
ListView StudentListView;
ProgressBar progressBar;
String HttpUrl = "http://sissy-nickels.000webhostapp.com/AllStudentData.php";
List<String> IdList = new ArrayList<>();
String LessonName;
HttpParse httpParse = new HttpParse();
ProgressDialog pDialog;
String FinalJSonObject;
HashMap<String,String> ResultHash = new HashMap<>();
String ParseResult ;
List<Student> studentList;
EditText search;



@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_allstudents);

    StudentListView = (ListView)findViewById(R.id.listview2);

    progressBar = (ProgressBar)findViewById(R.id.progressBar);

    LessonName = getIntent().getStringExtra("Lesson");

    HttpWebCall(LessonName);






    //Adding ListView Item click Listener.
    StudentListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            // TODO Auto-generated method stub

            Intent intent = new Intent(AllStudents.this,SingleStudent.class);

            // Sending ListView clicked value using intent.
            intent.putExtra("ListViewValue", IdList.get(position).toString());

            startActivity(intent);


            //Finishing current activity after open next activity.
            //finish();



        }
    });
    search = (EditText)findViewById(R.id.search);

    search.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged (CharSequence s, int start, int count, int after) {
        }

        // when text is entered in search box, filter list by search text
        @Override
        public void onTextChanged(CharSequence cs, int start, int before, int count) {
            filterStudents(cs);
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });


    // check student's name whether contain text entered in search box



}
public void HttpWebCall(final String LessonName){

    class HttpWebCallFunction extends AsyncTask<String,Void,String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            pDialog = ProgressDialog.show(AllStudents.this,"Loading Data",null,true,true);
        }

        @Override
        protected void onPostExecute(String httpResponseMsg) {

            super.onPostExecute(httpResponseMsg);

            pDialog.dismiss();

            //Storing Complete JSon Object into String Variable.
            FinalJSonObject = httpResponseMsg ;

            //Parsing the Stored JSOn String to GetHttpResponse Method.
            new GetHttpResponse(AllStudents.this).execute();

        }

        @Override
        protected String doInBackground(String... params) {

            ResultHash.put("LessonName",params[0]);

            ParseResult = httpParse.postRequest(ResultHash, HttpUrl);

            return ParseResult;
        }
    }

    HttpWebCallFunction httpWebCallFunction = new HttpWebCallFunction();

    httpWebCallFunction.execute(LessonName);
}

// JSON parse class started from here.
private class GetHttpResponse extends AsyncTask<Void, Void, Void>
{
    public Context context;


    public GetHttpResponse(Context context)
    {
        this.context = context;
    }

    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... arg0)
    {

        try
        {
            if(FinalJSonObject != null)
            {
                JSONArray jsonArray = null;

                try {
                    jsonArray = new JSONArray(FinalJSonObject);

                    JSONObject jsonObject;

                    Student student;

                    studentList = new ArrayList<Student>();

                    for(int i=0; i<jsonArray.length(); i++)
                    {
                        jsonObject = jsonArray.getJSONObject(i);

                        student = new Student();

                        // Adding Student Id TO IdList Array.
                        IdList.add(jsonObject.getString("id").toString());

                        //Adding Student Name.
                        student.StudentName = jsonObject.getString("Regnum").toString();


                        studentList.add(student);

                    }
                }
                catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result)

    {
        progressBar.setVisibility(View.GONE);

        StudentListView.setVisibility(View.VISIBLE);

        ListAdapter adapter = new ListAdapter(studentList, context);

        StudentListView.setAdapter(adapter);
        adapter.notifyDataSetChanged();

    }
}

private void filterStudents (CharSequence cs) {
    List<Student> filteredList = new ArrayList<>();

    if (TextUtils.isEmpty(cs)) {
        // no text is entered for search, do nothing
        return;
    }

    // build new student list which filtered by search text.
    for (Student student : studentList) {
        if (student.StudentName.contains(cs)) {
            filteredList.add(student);
        }
    }

    // show filtered list in listview
    ListAdapter adapter = new ListAdapter(filteredList, this);

    StudentListView.setAdapter(adapter);
    adapter.notifyDataSetChanged();
}}

来自项目的代码点击:

public class SingleStudent extends AppCompatActivity {
HttpParse httpParse = new HttpParse();
ProgressDialog pDialog;

// Http Url For Filter Student Data from Id Sent from previous activity.
String HttpURL = "http://sissy-nickels.000webhostapp.com/FilterStudentData.php";

// Http URL for delete Already Open Student Record.
String HttpUrlDeleteRecord = "http://sissy-nickels.000webhostapp.com/DeleteStudent.php";

String finalResult ;
HashMap<String,String> hashMap = new HashMap<>();
String ParseResult ;
HashMap<String,String> ResultHash = new HashMap<>();
String FinalJSonObject ;
TextView NAME,SURNAME,DEPT,REGNUM,GRADE;
String NameHolder, SurnameHolder, DeptHolder, RegnumHolder, GradeHolder;
Button UpdateButton, DeleteButton;
String TempItem;
ProgressDialog progressDialog2;



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

    NAME = (TextView)findViewById(R.id.name);
    SURNAME = (TextView)findViewById(R.id.surname);
    DEPT = (TextView)findViewById(R.id.dept);
    REGNUM = (TextView)findViewById(R.id.regnum);
    GRADE = (TextView)findViewById(R.id.grade);

    UpdateButton = (Button)findViewById(R.id.BDel);
    DeleteButton = (Button)findViewById(R.id.BUp);

    //Receiving the ListView Clicked item value send by previous activity.
    TempItem = getIntent().getStringExtra("ListViewValue");

    //Calling method to filter Student Record and open selected record.
    HttpWebCall(TempItem);


    UpdateButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent intent = new Intent(SingleStudent.this,StudentUpdate.class);

            // Sending Student Id, Name, Number and Class to next UpdateActivity.
            intent.putExtra("Id", TempItem);
            intent.putExtra("name", NameHolder);
            intent.putExtra("surname", SurnameHolder);
            intent.putExtra("dept", DeptHolder);
            intent.putExtra("regnum", RegnumHolder);
            intent.putExtra("grade", GradeHolder);

            startActivity(intent);

            // Finishing current activity after opening next activity.
            finish();

        }
    });

    // Add Click listener on Delete button.
    DeleteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            // Calling Student delete method to delete current record using Student ID.
            StudentDelete(TempItem);

        }
    });

}

// Method to Delete Student Record
public void StudentDelete(final String StudentID) {

    class StudentDeleteClass extends AsyncTask<String, Void, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            progressDialog2 = ProgressDialog.show(SingleStudent.this, "Φόρτωση", null, true, true);
        }

        @Override
        protected void onPostExecute(String httpResponseMsg) {

            super.onPostExecute(httpResponseMsg);

            progressDialog2.dismiss();

            Toast.makeText(SingleStudent.this, httpResponseMsg.toString(), Toast.LENGTH_LONG).show();

            finish();

        }

        @Override
        protected String doInBackground(String... params) {

            // Sending STUDENT id.
            hashMap.put("StudentID", params[0]);

            finalResult = httpParse.postRequest(hashMap, HttpUrlDeleteRecord);

            return finalResult;
        }
    }

    StudentDeleteClass studentDeleteClass = new StudentDeleteClass();

    studentDeleteClass.execute(StudentID);
}


//Method to show current record Current Selected Record
public void HttpWebCall(final String PreviousListViewClickedItem){

    class HttpWebCallFunction extends AsyncTask<String,Void,String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            pDialog = ProgressDialog.show(SingleStudent.this,"Φόρτωση",null,true,true);
        }

        @Override
        protected void onPostExecute(String httpResponseMsg) {

            super.onPostExecute(httpResponseMsg);

            pDialog.dismiss();

            //Storing Complete JSon Object into String Variable.
            FinalJSonObject = httpResponseMsg ;

            //Parsing the Stored JSOn String to GetHttpResponse Method.
            new GetHttpResponse(SingleStudent.this).execute();

        }

        @Override
        protected String doInBackground(String... params) {

            ResultHash.put("StudentID",params[0]);

            ParseResult = httpParse.postRequest(ResultHash, HttpURL);

            return ParseResult;
        }
    }

    HttpWebCallFunction httpWebCallFunction = new HttpWebCallFunction();

    httpWebCallFunction.execute(PreviousListViewClickedItem);
}


// Parsing Complete JSON Object.
private class GetHttpResponse extends AsyncTask<Void, Void, Void>
{
    public Context context;

    public GetHttpResponse(Context context)
    {
        this.context = context;
    }

    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... arg0)
    {
        try
        {
            if(FinalJSonObject != null)
            {
                JSONArray jsonArray = null;

                try {
                    jsonArray = new JSONArray(FinalJSonObject);

                    JSONObject jsonObject;

                    for(int i=0; i<jsonArray.length(); i++)
                    {
                        jsonObject = jsonArray.getJSONObject(i);

                        // Storing Student Name, Phone Number, Class into Variables.
                        NameHolder = jsonObject.getString("Name").toString() ;
                        SurnameHolder = jsonObject.getString("Surname").toString() ;
                        DeptHolder = jsonObject.getString("Dept").toString() ;
                        RegnumHolder = jsonObject.getString("Regnum").toString() ;
                        GradeHolder = jsonObject.getString("Grade").toString() ;

                    }
                }
                catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result)
    {

        // Setting Student Name, Phone Number, Class into TextView after done all process .
        NAME.setText(NameHolder);
        SURNAME.setText(SurnameHolder);
        DEPT.setText(DeptHolder);
        REGNUM.setText(RegnumHolder);
        GRADE.setText(GradeHolder);


    }
}}

比你提前!

2 个答案:

答案 0 :(得分:0)

您不应该从secondActivity重新创建。当你的工作在secondActivity中完成时,你就完成了它。这意味着,您只需在第二个活动中执行以下操作。

   @Override
public void onBackPressed() {
    super.onBackPressed();
}

答案 1 :(得分:0)

AllStudents活动

上试试
@Override
    protected void onResume() {
        super.onResume();
        if (studentList != null && studentList.size()>0) {
            ListAdapter adapter = new ListAdapter(studentList, this);
            StudentListView.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }
    }

*注

进行搜索时,运行filterStudents()方法

并替换适配器中的当前列表

ListAdapter adapter = new ListAdapter(filteredList, this);

但请确保如果您没有搜索任何内容..返回原始列表

ListAdapter adapter = new ListAdapter(studentList, this);

或者您将获得一个空列表视图