为什么我的 TaskLoader 只存储最后的数据?

Why does my TaskLoader only stores the last data?

我的代码流有问题。请请帮助:(

好的,流程是这样的。第一个 Activity 加载存储 ArrayList 数据的 recyclerviewArraylist 的数据包含有关 Premise 的信息,它从网站的 API 检索。它使用 GET 方法。

好的,接下来当我 select 来自 recyclerview 的项目时,它会将我带到 next Activity,我将输入 integer。然后,当它 returns 到 first Activity 时,它传递 integer 值和 recyclerview 项目的 indexrecyclerview 使用 index 更新项目并将 integer 值存储在项目中。

所以,我的问题是:当我重复 select 从 recyclerview 中输入一个项目并输入一个整数的过程时,第一个 activity 只存储最新的数据。上一个项目不见了。

我到底哪里做错了?我是移动应用程序开发的新手。请帮忙。我真是一无所知。

这是第一个 Activity。它叫做 MainActivity:

public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<ArrayList<Premise>> {

    private NotificationManagerCompat notificationManager;

    private LoaderManager loaderManager;
    private RecyclerView rcvPremises;
    private EditText premiseSearch;

    String pTrackVisitor_s, pPosition_s, pPremiseName, pLocation;
    int pTrackVisitor, pPosition;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        loaderManager = LoaderManager.getInstance(this);
        premiseSearch = findViewById(R.id.search);
        rcvPremises = findViewById(R.id.rcvPremise);

        Intent mainIntent = getIntent();
        pTrackVisitor_s = mainIntent.getStringExtra("trackVisitor");
        pPosition_s = mainIntent.getStringExtra("position");

        if (pTrackVisitor_s != null) {
            pTrackVisitor = Integer.parseInt(pTrackVisitor_s);
            pPosition = Integer.parseInt(pPosition_s);
        } else {
                pTrackVisitor = 0;
                pPosition = 0;
        }
    }

    @NonNull
    @Override
    public Loader<ArrayList<Premise>> onCreateLoader(int id, @Nullable Bundle args) {
        return new PremisesListTaskLoader(this, pTrackVisitor, pPosition);
    }

    @Override
    public void onLoadFinished(@NonNull Loader<ArrayList<Premise>> loader, ArrayList<Premise> vPremise) {
        loaderManager.destroyLoader(0);

        if (!vPremise.isEmpty()) {

            rcvPremises.setAdapter(new PremiseAdapter(this, vPremise));
            rcvPremises.setLayoutManager(new LinearLayoutManager(this));
            premiseSearchBar(premiseSearch, vPremise);
        } else
            Toast.makeText(this, "Unable to load data from iiotisme.com", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onLoaderReset(@NonNull Loader<ArrayList<Premise>> loader) {
    }
}

如果您需要更多的编码部分,请告诉我。我会分享它们。

首先,你不应该读取onCreate中的数据,它只会在Activity第一次创建时触发,我假设你的activity会恢复,它应该使用 onActivityResult 之类的东西。您应该使用 startActivityForResult 开始第二个 activity,在 onActivityResult 中,您将获得一个 intent,您每次都可以从中读取最新数据。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(data == null) 
            return;
        pTrackVisitor_s = data.getStringExtra("trackVisitor");
        pPosition_s = data.getStringExtra("position");

        if (pTrackVisitor_s != null) {
            pTrackVisitor = Integer.parseInt(pTrackVisitor_s);
            pPosition = Integer.parseInt(pPosition_s);
        } else {
            pTrackVisitor = 0;
            pPosition = 0;
        }
    }

您可以使用 intentindex 和其他所需数据传递给您的第二个 activity,如下所示

Intent data = new Intent();
data.putExtra("position", <yourClickedIndex>);
startActivityForResult(1234, SecondActivity.class);