2017-08-12 1 views
0

私はアンドロイドスタジオを使って最初のアンドロイドアプリを作っています。このAPPでは、12クラス(12アイテム)のリストビューがあります。 1つのクラスをクリックすると、このクラスの10項目のタブ付きアクティビティに入ります。各タブページには、アイテムを評価させるための評価バーがあります。Androidスタジオ:ListView to Tabbed Activity、タブページの評価バーの評価を保存

私はリストビューのアクティビティと、12のタブ付きアクティビティの12の独立したアクティビティを設定しました。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      if(i==0){ 
       Intent intent = new Intent(ListViewActivity.this, TabbedActivity1.class); 
       intent.putExtra("styleName", STYLE_NAMES[i]); 
       intent.putExtra("styleExample",STYLE_EXAMPLES[i]); 
       startActivity(intent); 
      } 
      else if(i==1){ 
       Intent intent = new Intent(ListViewActivity.this, TabbedActivity2.class); 
       intent.putExtra("styleName", STYLE_NAMES[i]); 
       intent.putExtra("styleExample",STYLE_EXAMPLES[i]); 
       startActivity(intent); 
      } 
    ...... // skip the other 10 tabbed activities. 
} 

今問題がある:私はタブ付きの活動の評価を終えた後、私はリストビューの活動に戻り、再度、各タブの活動へ]をクリックし、評価されているリストビューから各タブの活動へのコードは次のようです行った。

私のコードでは、アイテムをクリックするたびに新しいタブ付きアクティビティが開きますが、同じレイアウトでも内容は保存されません。

評価を保存するために、ListViewアクティビティで何かを行う必要があるかどうかは疑問でした。関連する質問を検索しましたが、そのシナリオでは、各リスト項目は単純な評価バーであることがわかりました。しかし、ここでは、私のリストアイテムは10個の評価バーを持つタブ付きアクティビティです。

したがって、私はそれをどうするか考えていません。私はアンドロイドスタジオでの経験がないので、どこから問題を解決するかわからない。どんなアイデアもありがとう!ありがとうございました!

答えて

0

まず、すべてのタブのアクティビティが似ている場合は、ケース12の多くのアクティビティではなく1つのアクティビティを作成し、特定のコンテンツと状態をインテントで渡すことができます。

あなたの質問への基本的なアプローチは、あなたの主なアクティビティに店舗の評価状態を適用することです。リスト項目をクリックするたびにタブアクティビティを開くと、そのアクティビティのレートがインテントで送信されます。次に、あなたのタブのアクティビティでレートを更新します。

これを達成するには、startActivityの代わりにstartActivityForResultを使用します。これは、評価アクティビティバーの最終状態を返すためにタブアクティビティが必要なためです。あなたはここに、以下に示す基本的な例を見ることができます

public class ListViewActivity extends AppCompatActivity { 

    private static final int REQUEST_RATE = 1; 
    private SparseIntArray rates = new SparseIntArray(); 

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

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       Intent intent = new Intent(ListViewActivity.this, TabActivity.class); 
       intent.putExtra("styleName", STYLE_NAMES[i]); 
       intent.putExtra("styleExample", STYLE_EXAMPLES[i]); 
       intent.putExtra("position", i); 
       intent.putExtra("rating", rates.get(i, 0)); 
       startActivityForResult(intent, REQUEST_RATE); 
      } 
     } 

    } 

    @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     switch (requestCode) { 
      case REQUEST_RATE: 
       if(resultCode == RESULT_OK) { 
        //retrieve and save rates 
        Bundle extras = data.getExtras(); 
        int position = extras.getInt("position"); 
        int rating = extras.getInt("rating"); 
        rates.put(position, rating); 
       } 
       break; 
     } 
    } 
} 

public class TabActivity extends AppCompatActivity { 

    private RatingBar ratingBar; 
    private int position; 

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

     Bundle extras = getIntent().getExtras(); 
     position = extras.getInt("position"); 
     int rating = extras.getInt("rating"); 

     ratingBar.setRating(rating); 
    } 

    @Override protected void onDestroy() { 
     //send current rating to list activity before we leave 
     setResult(); 
     super.onDestroy(); 
    } 

    private void setResult() { 
     Intent intent = new Intent(); 
     intent.putExtra("position", position); 
     intent.putExtra("rating", ratingBar.getRating()); 
     setResult(RESULT_OK, intent); 
    } 

} 
+0

は、あなたの答えをいただき、ありがとうございます。しかし、なぜ私のケースではうまくいかないのか分かりません。 2つの問題:1.私は最初に12の活動のための12の活動を設定し、あなたのレーティング検索コードを実装します。しかし、 '' int rating = extras.getInt( "rating") ''は私に '' 0''を返します。 2.私はこれらの12のアクティビティに対して1つのアクティビティを使用し、コードを実装しますが、APPはListViewのアイテムをクリックすると停止します。私は問題が私のタブビューデザインによって引き起こされているかどうか疑問に思っていました。私の場合、各タブアクティビティには10個のビューがあり、それぞれタブページ用であり、評価バーは各ビューに分散されています。 – gladys0313

+0

したがって、12個(タブ付きアクティビティ)* 10個のビュー= 120個のビューなので、120個のレーティングバーがあります。私がタブ付きアクティビティに戻るたびに、10個の評価グレードを取得する必要があります。これが問題の原因だと思いますか? – gladys0313

+0

この例では、各タブアクティビティに1つの評価があると想定しています。 10個の評価を含むモデルを作成できます。 'intent.putExtra(" rating "、ratingBar.getRating());"ここで単一の評価を渡すと、このモデルを渡すことができます。そして、私は 'onDestroy'の前に結果を渡します。あなたは' onBackPressed'でも試してみることができます – santalu

関連する問題