2017-09-14 5 views
0

私はレストラン向けのアプリを作成しており、注文したい特定の料理を選択できるようにしたいと考えています。これは、ListViewの形式で選択された個別の料理を表示するOrderActivityに追加されていますユーザーによって。
私は最良の方法でそれを行う方法がわかりません。インターフェイスを使用する必要がありますか、多分特定の料理の意図を取得する必要がありますか?
また、特定のリクエストをOrderActivityに保存すると、以前のアクティビティに戻るときに、リストビューに保存されたデータが失われることはありません。リストビューのデータを最初のアクティビティから2番目のアクティビティに保存するにはどうすればいいですか?

1つのアクティビティから2つ目のアクティビティにデータを送信し、それをListViewに表示する問題を解決するために、データを保存する方法がわかりません(SharedPreferencesの例を参照)。
2番目のアクティビティで戻るボタンをクリックすると、リストが空になります。
私は2番目のアクティビティを殺しているので、フォールトはonResume()であることを理解しています。最初に戻ったとき、それはそうですか?

どのように問題を解決するには?

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); 
    } 
    } 

//ボタンをクリックし、SecondActivityにdinnerNameを追加するリストビュー

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); 


    } 
} 

第二の活動:あなたは添付の写真で見ることができるように

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(); 
     } 

     } 
    } 

私たちは最初のアクティビティ、いくつかの料理を持っています。詳細なアクティビティに移動し、AddOrデアボタン。
このボタンをクリックして、写真に表示されている3つのアクティビティに自分の料理の名前を追加します。
これはListViewとして追加されます。
また、私は1つのアクティビティに戻るときに食べ物の名前がなくなるようにしたいと思います。

+0

とアダプタを更新しますが、私は 'onPause()' ...ああIseemsのAAビット複雑に保存を行うだろう現時点では。データが失われた場所を確認できるように手順を記録してください。 – parohy

+0

は、コール元アクティビティが呼び出されたアクティビティではなくonActivityResultを含むように、startActivityを結果として試行している場合、実装を理解できません。 – Anshul

+0

Parohy - セカンドアクティビティから最初のアクティビティに戻るときに、データを保存する方法がないため、データが失われます。 SharedPreferencesを使用してこれを行うにはどうすればよいですか? – newActivity21

答えて

0

SharedPreferencesはの簡易の値です。

インテントの境界を越えてオブジェクト全体を渡すことなく、アプリケーション全体でデータを永続的に保存およびクエリできる適切なデータベース(Sqlite、Realmなど)が必要です。

具体的には、後でそれを照会、その後、あなたが詳細ビューに行くとき、あなたがオブジェクトのデータベースIDを渡すことができ、特定のアイテムを取得するにはDinner.dinn配列

を交換する必要があります。

あなたが新しい項目を追加し、バックリストに行くとき、あなたはすべてのデータベースエントリ

関連する問題