从android中的派生类更新父类(包括导航视图)中声明的imageview

时间:2017-04-01 23:56:03

标签: android android-studio uiimageview

请在downvoting之前阅读,我阅读了不同的相关问题,但没有一个与我的情景相符:)

情境: 基类,包括导航抽屉布局,其标题部分与常规应用程序一样。标题包括imageview和textview。还有另一个活动让我说在我的案例中,从基类延伸 我不想在此时更改此父/子行为。

问题: 配置文件活动有api调用,用于更新服务器上的配置文件映像。在获得成功回复之后,我只想更新导航抽屉ImageView,无论用户是否回到其他活动或仍然处于个人资料活动。

到目前为止我尝试的是:

将Base Activity中的ImageView声明为静态,并尝试使用Picasso更新Profile活动API响应中的图像。

在Base Activity中将ImageView声明为静态并尝试imageview.setBitmap()方法。

尝试在Volley成功方法中使用Base类的实例,并使用我尝试更新ImageView的基类方法。

试图在api成功响应中使用runOnUiThread()但没有成功。 This在我的情况下没有意义,因为用户可能在按下按钮时没有登陆基本活动。下面是我在尝试更新基本活动中的图像的配置文件活动中的一段代码

   private void uploadImage() {

    if (bm == null) {
        uploadProfile();
    }
    else {
        String REGISTER_URL = new SharedPreferenceManager(getApplicationContext()).getKeyFromSharedPrefFile("MySharedPrefs", "globalURL") + "users/mobileupload";

        StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String s) {
                        navBarImage.setImageBitmap(bitmap); // where navBarImage is declared in BaseActivity Layout Navigation drawer in header layout
                     }
                },
                ....

        requestQueue.add(stringRequest);
    }
}

如果我退出并再次登录,则Api通话正常,图像正在上传和更新。 现在我的问题是是否有办法能够立即更新父类的视图......如果是的话,你能提供一些例子。

2 个答案:

答案 0 :(得分:1)

据我所知,SecondActivity设置了包括添加图片在内的信息。因此,该任务的目标是自动更新FirstActivity's抽屉ImageView。我们不能只调用SecondActivity中的视图,因为活动应该独立工作(这意味着 - 他们不能互相认识)。

我认为它是onActivityResult()的一个很好的用例,因为我们想要从SecondActivity传回结果。我们需要传递的信息是Uri - uri表示设备中的图像位置。

SecondActivity

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
     if (requestCode == SELECT_FILE && resultCode == RESULT_OK && data != null && data.getData() != null) {
            filePath = data.getData();

            // We will pass the value at the previous activity using this code
            Intent responseValue = new Intent();
            responseValue.putExtra(PROFILE_URI_KEY, filePath);
            setResult(Activity.RESULT_OK, responseValue);
     }
}

SecondActivity收到Uri的{​​{1}},CameraActivity也必须传回给上级。活动,以便它可以执行Drawer&a 39; a Image的失效。

Uri

MainActivity

在我们@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.e(TAG, "We receive someting " + requestCode + " " + (resultCode == Activity.RESULT_OK)); if (requestCode == RESUL_KEY_FOR_EDIT && resultCode == Activity.RESULT_OK) { Uri uri = (Uri) data.getParcelableExtra(EditProfile.PROFILE_URI_KEY); Picasso.with(getApplicationContext()) .load(uri) .fit(). centerCrop() .noFade() .error(R.drawable.placeholder) .into(navBarImage); } } 中,由于性能的提升,我们正在使用Picasso进行图像加载。

答案 1 :(得分:0)

为此,您可以做的是: 首先,创建一个界面并在&#34; 基础活动&#34;中实施。然后将此接口的实例传递给派生活动,一旦从服务器获得响应,请调用此接口方法将更新后的图像发送到 BaseActivity
在您已覆盖界面方法的 BaseActivity 中,使用 Picasso 更新图像。 希望它有所帮助。