我已经搜索过,但没有找到任何问题的明确答案。
在我的应用程序中,我有一个活动,您可以回答检查点,发送它并转到下一个检查点。用户还应该能够跳过并跳回上一个检查点。
让我用一些代码支持我的故事。
@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()。这导致我的应用程序根本没有响应。
非常感谢您花时间阅读问题。希望看到答案或任何建议如何尽快改变流程。感谢。
答案 0 :(得分:2)
我可能没有正确理解你,但重新实例化活动导航的原因是什么?你为什么不:
ViewFlipper
在同一活动中的视图之间导航?ViewPager
来使用用户可以使用手势导航的片段吗? 修改强>
您说您不知道如何使用新信息刷新小部件。这应该相当容易。
您有导航按钮的事件处理程序,因此您可以确定新的检查点,即您要显示的数据。必须为新检查点更改视图中显示检查点特定数据的每个控件。
例如,检查点的名称可以显示在TextView
内。然后你必须像TextView
那样更新:
TextView checkPointTitle = (TextView)findViewById(R.id.checkPointTitle);
checkPointTitle.setText(newCheckPointTitle);
您可以创建一个获取检查点ID的方法(可能是索引是检查点或数据库ID或其他任何对象的列表)并更新控件。然后在确定要显示的检查点的ID后,从previousCheckPoint
和nextCheckPoint
方法调用此方法。当然,当第一次为第一个检查点显示“活动”时,也会调用此方法。