【问题标题】:How to refresh the activity which is not finished in android?如何刷新未在android中完成的活动?
【发布时间】:2015-10-07 05:21:57
【问题描述】:

有没有办法刷新或更新 android 中的活动? 例如: 我有两个活动 Counter1Counter2 活动。这两个活动中有一个文本视图(tv_count) 和两个按钮(bt_plus 和 bt_minus),分别是加号和减号按钮。当用户点击相应按钮时,count(textview value) 会增加& 减少,count 现在从零开始 count=4,我将计数值保存在模型类中,开始第二个活动而不完成第一个活动。

button_next.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent=new Intent(getApplicationContext(), Counter2.class);
            startActivity(intent);

        }
    });

现在我正在导航到第二个活动,我可以进一步将 count 值从 4 增加到现在 count=6。

button_back.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            finish();

        }
    });

当我点击返回时,当前活动将完成。但 count 的值保持不变 4 应更新为 6Counter1 活动中。

根据冲浪,他们说要完成第一个活动,然后再进行第二个活动。但我不想完成第一个活动,而是要做一些操作 onResume() 或 onRestart() 和 onPause()

解决方案需要:更新第一个活动的计数值,而无需完成并显式调用活动。

以下是推荐链接: link1link2

这个问题可能已经有人问过了,但我希望有人能清楚地向我简要介绍一下。 这将非常有帮助,在此先感谢..

已编辑实际上,这只是一个单一的价值和单一的文本视图,实际上我的要求是其他东西。我正在开发一个餐厅应用程序,其中会有很多产品在列表视图和滑动选项卡中的可扩展列表视图中。当用户添加披萨时,当用户在搜索视图中搜索相同产品时,计数会增加。增加的计数在模型类中更新,但在滑动选项卡的列表视图中没有更新。 em>

【问题讨论】:

  • 我认为这里的问题可能是如果我没记错的话,您正在两个活动中实例化模型类。是这样吗?
  • 你说你在模型类中保存值??您如何将值发送到 Counter2 活动?通常你可以通过参数将值发送到另一个活动..但我在你的代码中看不到..你的类也是静态的吗?
  • 这只是一个例子。我没有发布我的实际代码太乱了。我在这里用计数器简化了它,不,我没有在两者上实例化。
  • @AsifSb 必须尝试在 onResume 方法中设置 textview 的值?
  • 每当我更改计数值时,我都会执行 model.setCount(4);

标签: android android-activity counter onresume


【解决方案1】:

您可以在Counter2中编写onActivityResult方法Activity并将值传递给Counter1

在您的Counter1中:

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 // TODO Auto-generated method stub
 super.onActivityResult(requestCode, resultCode, data);
 if(data.getExtras().containsKey("value")){
   txtview.setText(data.getStringExtra("value"));
  }
  }

在您的 Counter2 中:

 i.putExtra("value", value);
 setResult(RESULT_OK, i);

【讨论】:

  • 您可以将您的计数传递给第一个活动并根据需要使用。或者您可以将计数保存在SharedPreferences 并在需要的地方检索。这是最好的解决方案,因为它可以访问和编辑任何地方
【解决方案2】:

为了在Activity之间发送数据,你应该通过startActivityForResult()启动一个新的Activity

Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1000);

如果你想从 SecondActivity 发回数据

button_back.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        Intent returnIntent = new Intent();
        returnIntent.putExtra("result", result);
        setResult(RESULT_OK, returnIntent);
        finish();

    }
});

在你的 FirstActivity.class 中

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1000) {
        if(resultCode == Activity.RESULT_OK){
            String result=data.getStringExtra("result");
            // Update your view and model with the returned value 
        }
    }
}

【讨论】:

    【解决方案3】:

    您可以将 count 值从 Counter1 活动发送到 Counter2 活动。在那里增加它并保存在那里。在完成第二个活动时,将更新后的 counter 值发送回 Counter1 活动。

    你可以试试这样的 -

    button_next.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent=new Intent(getApplicationContext(), Counter2.class);
                intent.putExtra("CURRENT_COUNTER_VALUE", counter);
                startActivity(intent);
    
            }
    });
    

    Counter2 活动中,您可以像这样检索 counter 值 -

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String counter = extras.getIntExtra("CURRENT_COUNTER_VALUE",0);
    
    }
    

    然后在完成 Counter2 活动的同时 -

    button_back.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(getApplicationContext(), Counter1.class);
                intent.putExtra("CURRENT_COUNTER_VALUE", counter);
                startActivity(intent);
                finish();
            }
        });
    

    并在 Counter1 活动的 onResume() 方法中以相同的方式检索。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      相关资源
      最近更新 更多