2017-05-09 9 views
1

這裏我有3個活動: 我的第一個活動(活動A)有一個編輯文本,按鈕和列表視圖。 此活動將在編輯文本中鍵入的內容添加到列表視圖中。在我的第三個活動中調用onBackPressed()之後,我用什麼方法重新加載列表視圖

我的第二個活動(活動B)在用戶點擊列表視圖後打開。 此活動充當我的應用程序的記錄器。

我的第三項活動(活動C)是一個TabHost。當我向後移動時,我返回到活動A但是我的活動A的列表視圖是空的。

爲什麼? 我該如何解決這個問題?

活性A - >活動B - >活動C.

這是我的代碼活動A:

import android.content.Intent; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.ListView; 

import com.sdsmdg.tastytoast.TastyToast; 

import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 
    private static int CODE = 1; //declare as FIELD 

    DatabaseHelper db; 
    ListView lv; 
    EditText nameTxt; 
    ImageView savebtn; 
    ArrayList<String> arr = new ArrayList<String>(); 
    ArrayAdapter<String> adapter; 

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

     adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, arr); 


     //reference to the database to make sure the vacation titles are stored 
     db = new DatabaseHelper(this); 


     //edit text to enter a vacation 
     //--XML is vacationTitleTB--// 
     nameTxt = (EditText) findViewById(R.id.vacationTitleTB); 

     //save button to save into the listview later on 
     //--XML is createVacationTitleButton--// 
     savebtn = (ImageView) findViewById(R.id.planeimage); 


     //list view to store all of the vacation titles in, as long as the emulator stays running 
     //--XML is vacationTitlesListView--// 
     lv = (ListView) findViewById(R.id.vacationTitlesListView); 
     lv.setBackgroundColor(Color.LTGRAY); 


     savebtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //inserting the vacation title into the database 
       System.out.println(nameTxt.getText().toString()); 

       //Toast.makeText(MainActivity.this, "Data inserted", Toast.LENGTH_LONG).show(); 

       //getting the vacation title name 
       String getText = nameTxt.getText().toString(); 

       //checking to make sure that something was typed into the edit text,but is not the same edit text as already entered 
       if (arr.contains(getText)) 
       { 
        TastyToast.makeText(getBaseContext(), "Same vacation?? Click on the one you already made. Just add onto it.", TastyToast.LENGTH_LONG,TastyToast.DEFAULT); 
       } 
       //checking to make sure that the edit text is not left blank 
       else if (getText == null || getText.trim().equals("")) 
       { 
        TastyToast.makeText(getBaseContext(), "Excuse me, you need a Vacation Title for your vacation.", TastyToast.LENGTH_LONG,TastyToast.DEFAULT); 
       } 
       //otherwise add this to the array list 
       else 
       { 
        db.insertData2(new VacationTitleLog(nameTxt.getText().toString())); 
        arr.add(getText); 
        lv.setAdapter(adapter); 
        adapter.notifyDataSetChanged(); 


        //go to the next page 
       } 
      } 
     }); 


     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       Intent intent1 = new Intent(MainActivity.this, Main.class); 
       //pass the vacation title to the next page 
       intent1.putExtra("vacationtitlenamed", nameTxt.getText().toString()); 
       //launch the intent to Main 
       startActivity(intent1); 


      } 
     }); 

    } 


} 

這是我的代碼活性B:

import android.app.AlertDialog; 
import android.app.DatePickerDialog; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.DatePicker; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.google.android.gms.common.api.Status; 
import com.google.android.gms.location.places.Place; 
import com.google.android.gms.location.places.ui.PlaceAutocompleteFragment; 
import com.google.android.gms.location.places.ui.PlaceSelectionListener; 
import com.sdsmdg.tastytoast.TastyToast; 

import java.util.Calendar; 
import java.util.List; 


public class Main extends AppCompatActivity implements View.OnClickListener { 

    DatabaseHelper myDB; 
    Button btnDatePicker, btnDatePicker2, btnViewAll, btnDelete, forward, backward; 
    TextView title, from, to; 
    EditText txtDate, txtDate2;//, id; 
    private int mYear, mMonth, mDay; 
    private int mYear2, mMonth2, mDay2; 

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

     myDB = new DatabaseHelper(this); 


     btnDatePicker = (Button) findViewById(R.id.in_button); 
     btnDatePicker2 = (Button) findViewById(R.id.out_button); 


     btnDatePicker.setOnClickListener(this); 
     btnDatePicker2.setOnClickListener(this); 

     title = (TextView) findViewById(R.id.tit); 

     forward = (Button) findViewById(R.id.forwardBtn); 
     backward = (Button) findViewById(R.id.backBtn); 


     Intent intent1 = getIntent(); 
     Bundle bd = intent1.getExtras(); 
     if (bd != null) { 
      String vt = bd.getString("vacationtitlenamed"); 

      title.setText("Vacation Title " + "\n" + vt); 

     } 


     from = (TextView) findViewById(R.id.editText); 
     to = (TextView) findViewById(R.id.editText2); 

     txtDate = (EditText) findViewById(R.id.txtDate); 
     txtDate2 = (EditText) findViewById(R.id.txtDate2); 

     btnViewAll = (Button) findViewById(R.id.viewAllButton); 
     btnDelete = (Button) findViewById(R.id.deleteButton); 


     PlaceAutocompleteFragment places = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment); 
     places.setOnPlaceSelectedListener(new PlaceSelectionListener() { 
      @Override 
      public void onPlaceSelected(Place place) { 

       from.setText(place.getName().toString()); 
       System.out.println(place.getName()); 
       //from.setVisibility(View.INVISIBLE); 
       SingletonFromTo.getInstance().setFrom(from.getText().toString()); 
      } 

      @Override 
      public void onError(Status status) { 
       Toast.makeText(getApplicationContext(), status.toString(), Toast.LENGTH_SHORT).show(); 

      } 


     }); 

     PlaceAutocompleteFragment places2 = (PlaceAutocompleteFragment) 
       getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment2); 
     places2.setOnPlaceSelectedListener(new PlaceSelectionListener() { 
      @Override 
      public void onPlaceSelected(Place place2) { 

       to.setText(place2.getName().toString()); 
       System.out.println(place2.getName()); 
       //to.setVisibility(View.INVISIBLE); 
       SingletonFromTo.getInstance().setTo(to.getText().toString()); 


      } 

      @Override 
      public void onError(Status status2) { 
       Toast.makeText(getApplicationContext(), status2.toString(), Toast.LENGTH_SHORT).show(); 

      } 

     }); 

     previous(); 
     addData(); 
     viewAll(); 
     deleteAll(); 

    } 

    private void previous() { 
     backward.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Main.super.onBackPressed(); 

      } 
     }); 

    } 


    public void deleteAll() 
    { 
     btnDelete.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       myDB.deleteAllData(); 
      } 
     }); 

    } 


    public void addData() 
    { 
     forward.setOnClickListener(new View.OnClickListener() { 
      @Override 

      public void onClick(View v) { 

       if (from.getText().length() == 0) 
       { 
        TastyToast.makeText(getBaseContext(), "You need to enter in a from location", TastyToast.LENGTH_LONG,TastyToast.DEFAULT); 

       } 
       else if (to.getText().length() == 0) 
       { 
        TastyToast.makeText(getBaseContext(), "You need to enter in a to location",TastyToast.LENGTH_LONG,TastyToast.DEFAULT); 

       } 
       else if (txtDate.getText().length() == 0) 
       { 
        TastyToast.makeText(getBaseContext(), "You need to enter in a start date",TastyToast.LENGTH_LONG,TastyToast.DEFAULT); 


       } 
       else if (txtDate2.getText().length() == 0) 
       { 
        TastyToast.makeText(getBaseContext(), "You need to enter in a end date", TastyToast.LENGTH_LONG,TastyToast.DEFAULT); 
       } 
       else 
       { 

        System.out.println(txtDate.getText().toString()); 

        System.out.println(txtDate2.getText().toString()); 

        myDB.insertData(new VacationInfoLog(from.getText().toString(), to.getText().toString(), txtDate.getText().toString(), txtDate2.getText().toString())); 



        // myDB.queryToVacationTitle(); 

        //store the data here 
        Intent intent2 = new Intent(Main.this, TabbedActivity.class); 
        intent2.putExtra("title", title.getText().toString()); 


        SingletonFromTo.getInstance().setFrom(from.getText().toString()); 
        SingletonFromTo.getInstance().setTo(to.getText().toString()); 

        //intent2.putExtra("f", from.getText().toString()); 
        //intent2.putExtra("t", to.getText().toString()); 
        SingletonFromTo.getInstance().setStart(txtDate.getText().toString()); 
        SingletonFromTo.getInstance().setEnd(txtDate2.getText().toString()); 
        startActivity(intent2); 






       } 

      } 
     }); 

    } 

    public void viewAll() { 
     btnViewAll.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       List<VacationInfoLog> res = myDB.getAllData(); 


       StringBuffer buffer = new StringBuffer(); 
       for (VacationInfoLog info : res) { 
        buffer.append("ID : " + info.getID() + "\n"); 
        buffer.append("From : " + info.getFrom() + "\n"); 
        buffer.append("To : " + info.getTo() + "\n"); 
        buffer.append("Start : " + info.getStart() + "\n"); 
        buffer.append("End : " + info.getEnd() + "\n\n"); 
       } 


       showMessage("Vacations", buffer.toString()); 
      } 
     }); 

    } 


    public void showMessage(String title, String message) 
    { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setCancelable(true); 
     builder.setTitle(title); 
     builder.setMessage(message); 
     builder.show(); 
    } 

    @Override 
    public void onClick(View v) 
    { 

     if (v == btnDatePicker) 
     { 
      // Get Current Date 
      java.util.Calendar c = Calendar.getInstance(); 
      mYear = c.get(java.util.Calendar.YEAR); 
      mMonth = c.get(java.util.Calendar.MONTH); 
      mDay = c.get(java.util.Calendar.DAY_OF_MONTH); 

      DatePickerDialog datePickerDialog = new DatePickerDialog(this, 
        new DatePickerDialog.OnDateSetListener() { 
         @Override 
         public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 

          txtDate.setText((monthOfYear + 1) + "-" + dayOfMonth + "-" + year); 

         } 
        }, mYear, mMonth, mDay); 
      datePickerDialog.show(); 

     } 

     if (v == btnDatePicker2) 
     { 
      // Get Current Date 
      java.util.Calendar c2 = java.util.Calendar.getInstance(); 
      mYear2 = c2.get(java.util.Calendar.YEAR); 
      mMonth2 = c2.get(java.util.Calendar.MONTH); 
      mDay2 = c2.get(java.util.Calendar.DAY_OF_MONTH); 


      DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { 
       @Override 
       public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
        txtDate2.setText((monthOfYear + 1) + "-" + dayOfMonth + "-" + year); 


       } 
      }, mYear2, mMonth2, mDay2); 

      datePickerDialog.show(); 

     } 

     /*String i = txtDate.getText().toString(); 
     String k = txtDate2.getText().toString(); 



     if(i.compareTo(k) < 0) 
     { 

      System.out.println("HERE"); 
     }*/ 



    } 

} 

這裏是我的代碼活動C:看起來緊密地在我的ONBACKPRESSED()

import android.app.TabActivity; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.MenuItem; 
import android.widget.ListView; 
import android.widget.TabHost; 
import android.widget.TextView; 
@SuppressWarnings("deprecation") 
public class TabbedActivity extends TabActivity { 
    TextView tv_from, tv_to, tv_start, tv_end; 
    TabHost tabHost; 
    final Context context = this; 
    TextView t; 
    TextView d; 
    ListView lst; 


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


     viewOneItem(); 


     //Assign id to Tabhost. 
     tabHost = (TabHost) findViewById(android.R.id.tabhost); 



     //Creating tab menu. 
     final TabHost.TabSpec TabMenu1 = tabHost.newTabSpec("First tab"); 
     final TabHost.TabSpec TabMenu2 = tabHost.newTabSpec("Second Tab"); 
     final TabHost.TabSpec TabMenu3 = tabHost.newTabSpec("Third Tab"); 


     //Setting up tab 1 name. 
     TabMenu1.setIndicator("Trip"); 
     //Set tab 1 activity to tab 1 menu. 
     //TabMenu1.setContent(new Intent(this,TabActivity_1.class)); 
     TabMenu1.setContent(R.id.tab1); 


     //Setting up tab 2 name. 
     TabMenu2.setIndicator("Map"); 
     //Set tab 3 activity to tab 1 menu. 
     //TabMenu2.setContent(new Intent(this, TabActivity_2.class)); 
     //TabMenu2.setContent(R.id.tab2); 
     //TabMenu2.setContent(new Intent(this,DialogInMap.class)); 
     TabMenu2.setContent(new Intent(this,TabActivity_2.class)); 


     //Setting up tab 2 name. 
     TabMenu3.setIndicator("Record"); 
     //Set tab 3 activity to tab 3 menu. 
     //TabMenu3.setContent(R.id.tab3); 
     TabMenu3.setContent(new Intent(this, TabActivity_3.class)); 



     //Adding tab1, tab2, tab3 to tabhost view. 

     tabHost.addTab(TabMenu1); 
     tabHost.addTab(TabMenu2); 
     tabHost.addTab(TabMenu3); 




    } 

    public void viewOneItem() { 
     tv_from = (TextView)findViewById(R.id.tv_from); 
     tv_to = (TextView)findViewById(R.id.tv_to); 
     tv_start = (TextView)findViewById(R.id.tv_start); 
     tv_end = (TextView)findViewById(R.id.tv_end); 

     // tv = (TextView) findViewById(R.id.textView); 

     Intent intent2 = getIntent(); 
     Bundle bd = intent2.getExtras(); 

     if(bd != null) 
     { 
      String fr = bd.getString("f"); 
      String toooo= bd.getString("t"); 
      String st = bd.getString("s"); 
      String en = bd.getString("e"); 


      tv_from.setText("From " + SingletonFromTo.getInstance().getFrom()); 
      tv_to.setText("To " + SingletonFromTo.getInstance().getTo()); 
      //tv_from.setText("From " + fr); 
      //tv_to.setText("To " + toooo); 
      tv_start.setText("Start " +SingletonFromTo.getInstance().getStart()); 
      //tv_start.setText("Start " + st); 

      // tv_end.setText("End " + en); 

      tv_end.setText("End " + SingletonFromTo.getInstance().getEnd()); 

//   String f = bd.getString("f"); 
    //   tv.setText(f); 
     } 



    } 

    @Override 
    public void onBackPressed() 
    { 
     Intent inte = new Intent(TabbedActivity.this, MainActivity.class); 
     startActivity(inte); 
    } 



    public boolean onOptionsItemSelected(MenuItem item) 
    { 
     switch (item.getItemId()){ 
      case R.id.tab1: 
       return true; 
      case R.id.tab2: 
       return true; 
      case R.id.tab3: 
       return true; 

      default: 
       return super.onOptionsItemSelected(item); 

     } 
    } 
} 

回答

0

你的活動是空的,因爲你不回到活動A,你開始另一個實例。

當用戶登錄並且活動B完成並且活動C啓動時。活動A仍在運行。要從活動C返回它,請不要覆蓋onBackPressed,但保持在後按關閉活動的默認行爲。它通常應該返回到活動A.

+0

通過刪除@Override for onBackPressed()仍然清空我的活動A的列表視圖。 –

+0

從活動C中刪除整個'onBackPress'方法C –

+0

如果我刪除整個方法並返回...它將轉到活動B –

相關問題