Java 如何在android应用程序中保持不同对象实例的计数?

Java 如何在android应用程序中保持不同对象实例的计数?,java,android,class,Java,Android,Class,我正在制作一个包含MainActivity的应用程序,其中包含一个包含鸟类列表的recycler视图。当你点击鸟时,它会进入一个包含鸟信息的详细活动。(工程罚款) “详细信息”活动还有一个增加计数的按钮。我遇到的问题是,我不知道如何从“详细信息”活动访问bird实例以跟踪该计数 这里是鸟类类;这是我应该保存计数变量的地方 public class Bird { // Variables private String scientificName; private St

我正在制作一个包含MainActivity的应用程序,其中包含一个包含鸟类列表的recycler视图。当你点击鸟时,它会进入一个包含鸟信息的详细活动。(工程罚款)

“详细信息”活动还有一个增加计数的按钮。我遇到的问题是,我不知道如何从“详细信息”活动访问bird实例以跟踪该计数

这里是鸟类类;这是我应该保存计数变量的地方


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状态处理非常复杂,这种方法肯定会失败。

首先,在设置适配器的地方,我在主活动回收服务上设置适配器。无论何时,如果要转到详细的活动,请将对象传递到那里。然后,从该对象获取当前计数并增加计数。然后将新值设置为对象计数值。