在下一个和上一个按钮之间跳转相同的活动

时间:2011-10-06 08:57:31

标签: android android-activity

我已经搜索过,但没有找到任何问题的明确答案。

在我的应用程序中,我有一个活动,您可以回答检查点,发送它并转到下一个检查点。用户还应该能够跳过并跳回上一个检查点。

让我用一些代码支持我的故事。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.checkpointform);
    go = (GlobalObject)getApplication();

    _checkPoints = new ArrayList<CheckPoint>();
    _checkPoints.addAll(go.getCheckPoints());

    _currentActiveItemId = getIntent().getIntExtra("checkPointId", 0);
    int count = 0;
    while(count < _checkPoints.size()) {
        if(_currentActiveItemId == _checkPoints.get(count).getPrimaryKey()) {
            _checkPointTitle = _checkPoints.get(count).getCheckPointTitle();
        }
        count++;
    }

    final TextView tvCheckPointTitle = (TextView)findViewById(R.id.txtCheckpoint);
    tvCheckPointTitle.setText(_checkPointTitle);

    this.registerButtonEvents();

    _simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH.mm.ss");

    Log.d(TAG, "On create");
}

此代码未优化。我希望它在我这样做之前先工作所以不要对我这么努力,但提示总是非常受欢迎。

那么这里发生了什么。 实例化全局(应用程序范围)对象。 我得到一个arraylist并将其存储在当地的arraylist中。

我从让我来到这里的屏幕上拿走了额外的东西。 我循环通过列表来比较当前选择的项目ID和主键,以获得要显示的正确数据。

然后我按照这样注册按钮事件:

private void registerButtonEvents() {
    ImageButton btnTakePicture = (ImageButton)findViewById(R.id.btnTakePicture);
    btnTakePicture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            takePictureButton();            
        }         
    });

    Button btnPreviousCheckPoint = (Button)findViewById(R.id.btnPrev);
    btnPreviousCheckPoint.setOnClickListener(new View.OnClickListener() {   
        @Override
        public void onClick(View v) {
            previousCheckPoint();
        }
    });

    Button btnNextCheckPoint = (Button)findViewById(R.id.btnNext);
    btnNextCheckPoint .setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            nextCheckPoint();
        }
    });
}

onclick事件中调用的方法尚未执行任何操作。 这是我需要帮助的地方。

我需要的是,当前要销毁的活动,但在此之前,调用此活动..可能是这样的:Intent intent = new Intent(this,checkPointFormActivity);

并为下一个/上一个活动提供当前选择的id + 1(如果下一个项目为null,则获取列表中的第一个项目..这是后来的逻辑错误担心)

但是我在调​​用此活动方面一直没有成功。

简而言之:

我需要使用新数据调用与当前活动相同的活动。这样做,我想破坏/完成/删除/取消前一个活动。 (假设检查点1是当前活动。我按​​下一步,此活动应使用新数据刷新/完成,并以ID形式在意图中传递新数据进行调用。

我希望我能以这种方式提供足够的信息。 如果有什么不清楚的话。这不会让我感到惊讶。请让我知道,以便我可以编辑。

我尝试的是

private void nextCheckPoint() {
    int count = 0;
    int listLength = _checkPoints.size();

    while(count < listLength) {
        if(_currentActiveItemId == _checkPoints.get(count).getPrimaryKey()) {
            final Intent intent = new Intent(this, CheckPointFormActivity.class);
            intent.putExtra("checkPointId", _currentActiveItemId + 1);
            startActivity(intent);
        }
    }
}

并且还在startactivity之后和之前调用了finish()。这导致我的应用程序根本没有响应。

非常感谢您花时间阅读问题。希望看到答案或任何建议如何尽快改变流程。感谢。

1 个答案:

答案 0 :(得分:2)

我可能没有正确理解你,但重新实例化活动导航的原因是什么?你为什么不:

  1. 只需在用户导航时使用新检查点的信息刷新小部件?
  2. 或使用ViewFlipper在同一活动中的视图之间导航?
  3. 或者使用ViewPager来使用用户可以使用手势导航的片段吗?
  4. 修改
    您说您不知道如何使用新信息刷新小部件。这应该相当容易。

    您有导航按钮的事件处理程序,因此您可以确定新的检查点,即您要显示的数据。必须为新检查点更改视图中显示检查点特定数据的每个控件。

    例如,检查点的名称可以显示在TextView内。然后你必须像TextView那样更新:

    TextView checkPointTitle = (TextView)findViewById(R.id.checkPointTitle);
    checkPointTitle.setText(newCheckPointTitle);
    

    您可以创建一个获取检查点ID的方法(可能是索引是检查点或数据库ID或其他任何对象的列表)并更新控件。然后在确定要显示的检查点的ID后,从previousCheckPointnextCheckPoint方法调用此方法。当然,当第一次为第一个检查点显示“活动”时,也会调用此方法。