首页 文章

Android studio:ListView to Tabbed Activity,在标签页上保存ratingbar评级

提问于
浏览
0

我正在使用android studio制作我的第一个Android应用程序 . 在这个APP我有一个列表视图有12个类(12项) . 单击一个类后,它将进入带有此类的10个项目的选项卡式活动 . 在每个标签页上,我都有一个评级栏,让人们评价该项目 .

我为listview设置了一个活动,为这12个标签活动设置了12个独立活动 . listview到每个选项卡式活动的代码如下:

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个ratingbars的标签式活动 .

因此,我不知道该怎么做 . 我没有android studio的经验,所以我不知道从哪里开始解决这个问题 . 任何想法都表示赞赏!非常感谢提前!!

1 回答

  • 0

    首先,如果您的所有标签活动都相似,您可以创建一个活动,而不是在您的案例12中创建一个活动,并通过意图传递特定内容和状态 .

    您的问题的基本方法是主活动中的商店评级状态,以及每次单击列表项时打开选项卡活动时,都会按意图发送相关活动的比率 . 然后在标签活动中使用它更新费率 .

    要实现这一点,我们将使用 startActivityForResult 而不是 startActivity ,因为我们需要tab活动来返回评级栏的最后状态 .

    您可以在此处看到如下所示的基本示例:

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

相关问题