java - Activity 仅在重新加载应用程序后加载首次按下的索引的数据

标签 java android

我使用 listView 创建了 Activity,它使用 setOnItemClickListener 来确定已按下哪个索引。然后它应该根据所选索引将数据传递到下一个 Activity 。

值的传递有效,但仅适用于应用程序重新加载后按下的第一个 listView 索引。

为了说得更清楚。加载应用程序时,我可以按 ListView 的任何索引,这会将数据传递到下一个 Activity 并正确显示它,但是当我返回 ListView 并选择不同的索引时,它仍然显示与上一个 Activity 相同的数据索引而不更新它。因此,我必须重新加载应用程序才能显示新的索引结果。

这是我的 ViewListActivity:

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

    artistList = (ListView) findViewById(R.id.artistList);
    databasehandler = new SqliteHandler(ViewArtistActivity.this);
    allArtists = databasehandler.getAllArtists();
    artistName = new ArrayList<>();
    singleArtistDetails = new ArrayList<>();

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    if (allArtists.size() > 0) {

        for (int i=0; i < allArtists.size(); i++) {

            ArtistModel artistModel = allArtists.get(i);
            artistName.add(artistModel.getArtistName());
        }
    }

    adapter = new ArrayAdapter(ViewArtistActivity.this, android.R.layout.simple_list_item_1, artistName);
    artistList.setAdapter(adapter);

    artistList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            ArtistModel artistModel = allArtists.get(position);
            singleArtistDetails.add(artistModel.getArtistName());
            singleArtistDetails.add(artistModel.getArtistDOB());
            singleArtistDetails.add(artistModel.getArtistBiography());

            Intent intent = new Intent(ViewArtistActivity.this, SavedArtistDetailsActivity.class);
            intent.putExtra("NAME", singleArtistDetails.get(0));
            intent.putExtra("DOB", singleArtistDetails.get(1));
            intent.putExtra("BIOGRAPHY", singleArtistDetails.get(2));
            startActivity(intent);

        }
    });
}

这是我用于显示选定索引结果 Activity 的代码:

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

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    artistSavedNameLbl2 = (TextView) findViewById(R.id.artistSavedNameLbl2);
    artistSavedDOBLbl2 = (TextView) findViewById(R.id.artistSavedDOBLbl2);
    artistSavedBiographyLbl2 = (TextView) findViewById(R.id.artistSavedBiographyLbl2);
    btnDeleteDetails = (Button) findViewById(R.id.btnDeleteDetails);

    updateUI();
}

private void updateUI() {

    artistSavedNameLbl2.setText(getIntent().getStringExtra("NAME"));
    artistSavedDOBLbl2.setText(getIntent().getStringExtra("DOB"));
    artistSavedBiographyLbl2.setText(getIntent().getStringExtra("BIOGRAPHY"));

}

最佳答案

做一件事,在 onClick 方法中初始化(不是说声明)数组列表 singleArtistDetails,然后再向其添加任何值。

喜欢

singleArtistDetails = new ArrayList();

希望这会有所帮助。

关于java - Activity 仅在重新加载应用程序后加载首次按下的索引的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49720300/

相关文章:

android - 移动设备的 HTML 响应字体大小

android - 如何将 HashMap 保存到共享首选项?

android - 如何知道一个对话框是否在 Android 中被关闭?

java - 通过 Android 应用程序注册教师?

Java Spring 应用程序存在内存泄漏。系统非堆内存不断增加

java - 当 jackson 反序列化失败时, Jersey 异常映射器不工作

java - 使用 @Path ("/path"的 HttpServlet 与 @POST 对比 doPost

java - 具有不可编辑消息正文的短信 Intent

java - ApacheKafka Appender 回退

java - 如何为 JTextArea 设置全宽?