2017-08-12 35 views
0

我正在使用android studio製作我的第一個android應用程序。在這個應用程序中,我有12個類(12個項目)的列表視圖。點擊一個課程後,它會進入一個帶有10個這個課程的標籤活動。在每個標籤頁上,我都有一個評級欄來讓人們評價該項目。Android工作室:ListView到選項卡式活動,在標籤頁上保存額定欄評分

我爲列表視圖設置了一個活動,併爲這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活動,點擊進入每個標籤的活動再次,收視率不見了。

我猜我的理由是,在我的代碼中,每次點擊該項目時都會打開一個新的標籤式活動,雖然佈局相同,但內容不會被保存。

所以我想知道我是否應該在ListView活動上做點什麼來保存收視率。我已經搜索了相關的問題,但是我發現在他們的情景中,每個列表項只是一個簡單的評分欄。但是在這裏,我的列表項是一個帶有10個評分欄的選項卡式活動。

因此,我不知道該怎麼做。我沒有android工作室的經驗,所以我不知道從哪裏開始解決這個問題。任何想法表示讚賞!提前感謝!

回答

0

首先,如果所有選項卡活動都是相似的,您可以在案例12中創建一個活動而不是多個活動,並通過意向傳遞特定內容和狀態。

您的問題的基本方法是在您的主要活動中存儲評級狀態,並且當您每次單擊列表項目時打開選項卡活動以意向方式發送相關活動的比率。然後在您的標籤活動中使用它更新費率。

爲了達到這個目的,我們將使用startActivityForResult而不是startActivity,因爲我們需要選項卡活動來返回評級欄的最後一個狀態。

你可以看到如下圖所示這裏的基本例如:

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

謝謝您的回答。但我不知道爲什麼它不適合我的情況。兩個問題:1.我首先保留12-activities-for-tab-Activity設置並實現您的評分檢索代碼。但是,「int rating = extras.getInt(」rating「)''會返回給我''0''。 2.我爲這12項活動使用了1項活動並實施了您的代碼,但是當我點擊ListView上的項目時APP停止。我想知道這些問題是否是由我的標籤視圖設計引起的。就我而言,每個選項卡活動包含10個視圖,每個視圖用於一個選項卡頁面,並且評級欄分佈在每個視圖中。 – gladys0313

+0

因此,12(標籤活動)* 10意見= 120意見,所以我有120個ratingbars。每次我回到標籤活動時,都應該檢索10個評分等級。你認爲這是問題的原因嗎? – gladys0313

+0

該示例假設每個選項卡活動都具有一個評級。您可以創建一個包含10個評分的模型。而不是'intent.putExtra(「rating」,ratingBar.getRating());'在這裏傳遞單個評分,你可以通過這個模型。我在'onDestroy'之前傳遞了結果,你可以嘗試'onBackPressed'以及 – santalu

相關問題