2017-09-14 1 views
0

Ich schreibe eine App für ein Restaurant und möchte ein bestimmtes Gericht auswählen können, das Sie bestellen möchten und das zu OrderActivity hinzugefügt wurde, wo Sie in Form von ListView einzelne ausgewählte Gerichte anzeigen vom Benutzer.
Ich weiß nicht, wie man es am besten macht, müssen Sie die Schnittstelle verwenden und vielleicht nur die Absicht eines bestimmten Gerichts bekommen?
Und wie speichere ich eine bestimmte Anfrage in OrderActivity, so dass ich die gespeicherten Daten in der ListView nicht verlieren, wenn ich zu einer früheren Aktivität zurückkehren?Wie speichere ich die Daten in meinem ListView von der ersten bis zur zweiten Aktivität?

Ich habe es geschafft, das Problem der Übertragung von Daten von einer Aktivität zur zweiten Aktivität zu lösen und es auf der ListView zu zeigen, ich weiß nicht, wie man diese Daten speichert, sagen wir am Beispiel von SharedPreferences?
Wenn ich in meiner zweiten Aktivität auf die Zurück-Schaltfläche klicke, wird meine Liste leer.
Ich verstehe, dass der Fehler auf onResume() ist, weil ich die zweite Aktivität töte, wenn ich zurück zum ersten komme, ist das so?

Wie das Problem zu lösen?

FirstActivity:

public class DinnerDetailActivity extends AppCompatActivity { 

    public static final String EXTRA_DINNER = "dinner"; 

    private final int requestCode = 1; 


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


     int dinner = (Integer) getIntent().getExtras().get(EXTRA_DINNER); 

     String dinnerName = Dinner.dinn[dinner].getName(); 
     TextView textView = (TextView) findViewById(R.id.dinner_text); 
     textView.setText(dinnerName); 


     int dinnerImage = Dinner.dinn[dinner].getImageResourceId(); 
     ImageView imageView = (ImageView) findViewById(R.id.dinner_image); 
     imageView.setImageDrawable(getResources().getDrawable(dinnerImage)); 
     imageView.setContentDescription(dinnerName); 



     Toolbar myChildToolbar = (Toolbar) 
     findViewById(R.id.my_child_toolbar_obiady_detail); 
     setSupportActionBar(myChildToolbar); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 

    /* @Override 
    protected void onResume() { 

     SharedPreferences sharedPref = getSharedPreferences("KEY", Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPref.edit(); 
     editor.putString("KEY", listItems.add(); 
     editor.apply(); 

     Toast.makeText(getApplicationContext(), "Save!", Toast.LENGTH_SHORT).show(); 
     super.onResume(); 
    } 
*/ 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     getMenuInflater().inflate(R.menu.menu_main, menu); 

     TextView textView = (TextView) findViewById(R.id.dinner_text); 
     CharSequence dinnerName = textView.getText(); 
     MenuItem menuItem = menu.findItem(R.id.action_share); 
     ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem); 
     Intent intent = new Intent(Intent.ACTION_SEND); 
     intent.setType("text/plain"); 
     intent.putExtra(Intent.EXTRA_TEXT, dinnerName); 
     shareActionProvider.setShareIntent(intent); 

     return true; 
    } 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     switch (item.getItemId()) { 
      case R.id.action_create_order: 
       Intent intent = new Intent(this, TopFragment.class); 
       startActivity(intent); 
       return true; 
      default: 

     return super.onOptionsItemSelected(item); 
    } 
    } 

// Klicken Sie die Schaltfläche, und fügen Sie dinnerName zu SecondActivity Listview

public void addInOrder(View view) { 

    int dinner = (Integer) getIntent().getExtras().get(EXTRA_DINNER); 

    String dinnerName = Dinner.dinn[dinner].getName(); 

    Intent intent1 = new Intent(this, CreateYourOrderActivity.class); 
    intent1.putExtra("OK", dinnerName); 
    startActivityForResult(intent1, requestCode); 


    } 
} 

Zweite Aktivität:

public class CreateYourOrderActivity extends AppCompatActivity { 

    private ListView listView; 
    private ArrayAdapter<String> adapter; 
    private ArrayList<String> listItems; 

    private String dinner; 

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

     Toolbar myChildToolbar = (Toolbar) 
      findViewById(R.id.my_child_toolbar); 

     setSupportActionBar(myChildToolbar); 

     ActionBar ab = getSupportActionBar(); 
     ab.setDisplayHomeAsUpEnabled(true); 

     textView = (TextView) findViewById(R.id.text_view); 

    } 
/* 
    @Override 
    protected void onResume() { 

     SharedPreferences sharedPref = getSharedPreferences("KEY", Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPref.edit(); 
     editor.putString("KEY", obiad); 
     editor.apply(); 

     listItems.add(obiad); 
     adapter.notifyDataSetChanged(); 

     Toast.makeText(getApplicationContext(), "Save!", Toast.LENGTH_SHORT).show(); 
     super.onResume(); 
    } 
*/ 
    /* @Override 
    public void onBackPressed() { 
     SharedPreferences sharedPref = getSharedPreferences("KEY", Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPref.edit(); 
     editor.putString("KEY", listItems.get(0).toString()); 
     editor.apply(); 

     Toast.makeText(getApplicationContext(), "Save!", Toast.LENGTH_SHORT).show(); 
    }*/ 

    public void saveInfo(View view) { 



    } 

    public void openInfo(View view) { 

     SharedPreferences sharedPref = getSharedPreferences("KEY", Context.MODE_PRIVATE); 
     String obiadNames = sharedPref.getString("KEY", ""); 

     textView.setText(obiadNames); 
     //listItems.add(obiadNames); 
     //adapter.notifyDataSetChanged(); 

    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     getMenuInflater().inflate(R.menu.menu_main, menu); 

     return true; 
    } 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     switch (item.getItemId()) { 
      case R.id.action_create_order: 
       Intent intent = new Intent(this, MainActivity.class); 

       return true; 
      default: 

       return super.onOptionsItemSelected(item); 
     } 

    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 


     Intent intent = getIntent(); 

     if(resultCode == RESULT_OK) { 
      if(requestCode == 1){ 


      dinner = data.getExtras().getString("OK"); 

      listView = (ListView) findViewById(R.id.listView); 


      listItems.add(dinner); 


      adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems); 
      listView.setAdapter(adapter); 

      // adapter.add(dinner); 
      adapter.notifyDataSetChanged(); 

      finish(); 
     } 

     } 
    } 

So wie Sie in den beigefügten Fotos sehen Wir haben die erste Aktivität, mehrere Gerichte, von denen wir zu der detaillierten Aktivität gehen, wo wir AddOr haben der Knopf.
Ich möchte auf diesen Knopf klicken, um den Namen meines spezifischen Gerichts in den 3 Aktivitäten hinzuzufügen, die Sie in den Bildern sehen.
Dies ist als ListView hinzugefügt werden.
Auch möchte ich die Namen der Gerichte nicht verlassen haben, wenn ich zu 1 Aktivität zurückkehre.

+0

ich die rettende auf der 'onPause tun würde()' ... oh Iseems aa bisschen kompliziert im Augenblick. Versuchen Sie, die Schritte zu protokollieren, damit Sie sehen können, wo die Daten verloren gehen. – parohy

+0

kann die Implementierung nicht verstehen, wenn Sie versuchen, activity for result zu starten, da die aufrufende Aktivität onActivityResult nicht die aufgerufene Aktivität enthalten soll. – Anshul

+0

Parohy - Daten gehen verloren, wenn von der zweiten Aktivität zur ersten zurückgekehrt wird, da es keine Möglichkeit gibt, sie zu speichern. Wie kann ich dies mit SharedPreferences tun? – newActivity21

Antwort

0

SharedPreferences sind für einfache Werte.

Sie benötigen eine geeignete Datenbank (Sqlite, Realm oder andere), mit der Sie Ihre Daten über die gesamte Anwendung persistent speichern und abfragen können, ohne ganze Objekte über Intent-Grenzen hinweg zu übergeben.

Insbesondere müssen Sie die Dinner.dinn Array

ersetzen bestimmte Elemente zu erhalten, wenn Sie auf eine Detailansicht gehen, können Sie die Datenbank-ID des Objekts übergeben, es dann später abfragen.

Wenn Sie ein neues Element hinzufügen, und zurück in die Liste gehen, werden Sie den Adapter mit allen Datenbankeinträge aktualisieren

Verwandte Themen