【问题标题】:re-draw an activity in Android在 Android 中重新绘制一个活动
【发布时间】:2011-01-16 09:04:36
【问题描述】:

我的问题看起来很简单,但我无法在这里找到答案。

我在一个应用程序中有不同的活动。活动相互开始。 我有一个 “主屏幕” 显示所有不同的可用级别,用户点击一个级别并且该活动被午餐,当用户完成该级别时,他可以按后退按钮转到主屏幕并开始另一个级别。 当按下后退按钮时,我想再次重新绘制“主屏幕”,因为这次完成关卡的拇指​​将不同,以表明它已完成。

那么如何在按下后退按钮时重新绘制活动? (我想我应该在 Activity.onResume 方法中放一些代码) (我使用 SharedPreferences 来保存已完成关卡的状态)

主屏幕活动基本上是这样的:

/** 在第一次创建活动时调用。 */ 公共无效 onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); 设置内容视图(R.layout.maps); SharedPreferences settings = getSharedPreferences((getResources().getString(R.string.PREFS_HI)),0); /**/ GridView gridview = (GridView) findViewById(R.id.gridview); gridview.setAdapter(new ImageAdapter(this,(settings.getBoolean("level_1_finished", false)))); /**/ gridview.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View v, int position, long id) { //Open the map which was clicked on, if there is one if(position+1 > 1){ Toast.makeText(maps.this, "Level " + (position+1) + " is not yet available!", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(maps.this, "Opening Level " + (position+1), Toast.LENGTH_SHORT).show(); Intent myIntent = new Intent(v.getContext(), Tutorial2D.class); startActivity(myIntent); } } }); }

ImageAdapter 然后使用布尔值 true/false 来选择图像的来源,要么是未完成的缩略图,要么是已完成的级别缩略图。

【问题讨论】:

  • 您自己回答了您的问题,只需覆盖 onResume 并更新方法中的按钮。
  • “主屏幕”是一个在onCreate方法中创建的gridView。我想做这样的事情:@Override public void onResume(){ /* call onCreate here */ }
  • 不要在 onResume 方法中调用 onCreate,这不是正确的做法。您只需要更新一个元素,而不是重新绘制所有视图。
  • @gulbrandr:@Konstantin:我添加了主屏幕活动的代码,请描述我应该如何重新绘制整个活动或仅重绘视图的某些部分。

标签: android android-activity draw redraw onresume


【解决方案1】:

首先将您的GridView 对象作为班级成员。然后重写 onResume() 方法,您可以在其中根据用户所做的操作重新设置网格视图适配器。

private GridView gridview;
@Override
protected void onResume() {
    super.onResume();
    gridview.setAdapter(/* your new ImageAdapter here */);
}

【讨论】:

  • 能否请您展示(用伪代码或java)您将如何实现onResume() 方法?
  • 这正是我所需要的,谢谢 只是一个后续问题,我是否需要再次在 onResume 中执行“gridview.setOnItemClickListener(new OnItemClickListener() {”,因为 gridView 已更新?
  • @Alborz: 否,因为监听器已在 onCreate 方法中设置。
【解决方案2】:

您应该使用ActivitystartActivityForResult() 方法。基本上,您正在开始您的下一个活动,在完成时询问请求的状态。就在它完成之前,它应该调用 setResult(允许您指定用户是否完成了关卡)。调用它的 Activity(您的主屏幕)将调用其 onActivityResult() 方法。在这种方法中,您可以根据需要更新您的视图。

【讨论】:

  • 我明白你的意思。但是 onActivityResult() 可以调用该活动的 onCreate 方法。 (因为一切都在 onCreate 方法中完成)
  • 不应该。 onCreate 方法设计为仅在 Activity 首次加载或从内存转储后加载时调用。您应该通过 onActivityResult 调用直接更新 UI(或 UI 后面的适配器)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
相关资源
最近更新 更多