[英]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.