繁体   English   中英

Android Studio:将ListView转换为选项卡式活动,在选项卡页上保存等级

[英]Android studio: ListView to Tabbed Activity, save ratingbar rating on the tab pages

我正在使用android studio制作我的第一个android应用程序。 在这个应用程序中,我有一个包含12个类(12个项目)的列表视图。 单击一个班级后,它将进入选项卡式活动,其中包含10个该班级的项目。 在每个标签页上,我都有一个评分栏,让人们对该商品进行评分。

我为列表视图设置了一个活动,为这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 studio的经验,所以我不知道从哪里开始解决问题。 任何想法表示赞赏! 在此先多谢!!

首先,如果所有选项卡活动都相似,则可以只创建一个活动,而不是在您的案例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);
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM