Java 如何在android应用程序中保持不同对象实例的计数?
我正在制作一个包含MainActivity的应用程序,其中包含一个包含鸟类列表的recycler视图。当你点击鸟时,它会进入一个包含鸟信息的详细活动。(工程罚款) “详细信息”活动还有一个增加计数的按钮。我遇到的问题是,我不知道如何从“详细信息”活动访问bird实例以跟踪该计数 这里是鸟类类;这是我应该保存计数变量的地方Java 如何在android应用程序中保持不同对象实例的计数?,java,android,class,Java,Android,Class,我正在制作一个包含MainActivity的应用程序,其中包含一个包含鸟类列表的recycler视图。当你点击鸟时,它会进入一个包含鸟信息的详细活动。(工程罚款) “详细信息”活动还有一个增加计数的按钮。我遇到的问题是,我不知道如何从“详细信息”活动访问bird实例以跟踪该计数 这里是鸟类类;这是我应该保存计数变量的地方 public class Bird { // Variables private String scientificName; private St
public class Bird {
// Variables
private String scientificName;
private String commonName;
private String description;
private String numberImage;
private int count;
// Defaults Constructor
public Bird() {
}
// Constructor with parameters
public Bird(String scientificName, String commonName, String description, String numberImage) {
this.scientificName = scientificName;
this.commonName = commonName;
this.description = description;
this.numberImage = numberImage;
this.count = 0;
}
// Getters
public String getScientificName() {
return scientificName;
}
public String getCommonName() {
return commonName;
}
public String getDescription() {
return description;
}
public String getNumberImage() {
return numberImage;
}
public int getCount() {
return this.count;
}
// Setters
public void setScientificName(String scientificName) {
this.scientificName = scientificName;
}
public void setCommonName(String commonName) {
this.commonName = commonName;
}
public void setDescription(String description) {
this.description = description;
}
public void setNumberImage(String numberImage) {
this.numberImage = numberImage;
}
public void setCount(int count) {
this.count = count;
}
}
下面是详细的活动
public class BookActivity extends AppCompatActivity {
private ImageView birdImage;
private TextView birdCommonName;
private TextView birdSciName;
private TextView birdDesc;
private TextView birdCount;
private Button countButton;
int count;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_book);
// Views
birdCommonName = findViewById(R.id.com_name);
birdSciName = findViewById(R.id.sci_name);
birdDesc = findViewById(R.id.description);
birdImage = findViewById(R.id.bird_image);
birdCount = findViewById(R.id.bird_count);
countButton = findViewById(R.id.count_button);
// Receive data
Intent intent = getIntent();
String commonName = intent.getExtras().getString("CommonName");
String sciName = intent.getExtras().getString("SciName");
String desc = intent.getExtras().getString("Description");
int img = intent.getExtras().getInt("Image");
// Set values
birdCommonName.setText(commonName);
birdSciName.setText(sciName);
birdDesc.setText(desc);
birdImage.setImageResource(img);
}
public void plusCount() {
birdCount.setText(count);
}
}
``
您将原始绑定的bird数据传递给一个details活动,然后简单地将其绑定到UI。这是拥有这种类型的只读组件的最简单方法 如果您想让这些数据“活的”、可操作的和有状态的,并保留Android最佳体系结构实践,您应该解决以下方法之一:
- 使用数据库支持的ORM(, 文件备份/内存中),以便一致地查询和写入 应用程序不同部分中的数据(最好合并) 那跟,, )
- 使用a/方法基本上完成以下任务: 与此相同,但使用自定义序列化/反序列化管道 (学习曲线更简单,但灵活性/可扩展性/性能/功能集更低)
- 使用带有共享ViewModel层的单页应用程序方法, 负责数据CRUD并利用以前的选项之一或完全在内存存储库中
请不要试图在应用程序组件之间通过任何类型的引用传递对象,尤其是UI组件。Android状态处理非常复杂,这种方法肯定会失败。首先,在设置适配器的地方,我在主活动回收服务上设置适配器。无论何时,如果要转到详细的活动,请将对象传递到那里。然后,从该对象获取当前计数并增加计数。然后将新值设置为对象计数值。