从另一个活动更新tabhost imageView

时间:2011-12-04 02:02:56

标签: android

我目前有一个包含5个标签的tabhost。在其中一个选项卡上,我有一个ImageView,当创建选项卡时,它会通过POST拉取数据以显示一个数字。我想知道如何从一个标签活动(比如Rate.java)我可以调用该方法来更新超过其中一个标签的ImageView。

我知道这不是很具体,但我想是我写的,所以你知道我在说什么。

如果您需要更多信息,请告诉我。

talitore

1 个答案:

答案 0 :(得分:1)

根据所提供的信息,我们可以立即想到两个选项:

  • 从标签活动发送广播(例如Rate.java)并让托管ImageView的活动收听广告。
  • 创建某种BaseActivity(扩展Activity),它采用自定义侦听器接口和更新方法。让您的标签活动扩展BaseActivity和ImageView的活动实现它。然后,您可以从选项卡活动中调用侦听器上的update方法(将它们实例化为BaseActivity并传​​递给侦听器),并使用ImageView对其执行活动。

//按请求编辑:

有关广播和接收器信息的一个很好的起点是BroadcastReceiver的文档。在您的情况下,最简单的方法是在代码中创建它们。

最小示例将包含以下内容:

<强> BroadcastSendingActivity:

public class BroadcastSendingActivity extends Activity {

    public static final String UPDATE_IMAGEVIEW = "UPDATE_IMAGEVIEW";

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

        Intent i = new Intent();
        i.setAction(UPDATE_IMAGEVIEW);
        sendBroadcast(i);
    }

}

<强> BroadcastReceivingActivity:

public class BroadcastReceivingActivity extends Activity {

    private BroadcastReceiver mReceiver;

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

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver();
    }

    @Override
    protected void onResume() {
        super.onResume();
        registerReceiver();
    }

    private void registerReceiver() {
        if (mReceiver == null) {
            mReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    if (intent.getAction().equals(BroadcastSendingActivity.UPDATE_IMAGEVIEW)) {
                        // code to update imageview...
                    }
                }
            };
        }
        getApplicationContext().registerReceiver(mReceiver, new IntentFilter(BroadcastSendingActivity.UPDATE_IMAGEVIEW));
    }

    private void unregisterReceiver() {
        if (mReceiver != null) {
            getApplicationContext().unregisterReceiver(mReceiver);
        }
    }

}

请注意,我没有测试代码,但我相信你能够找出我可能犯的任何错误。 :)