如何从 Activity 中获取 Widget 的 TextView 的文本?

Posted

技术标签:

【中文标题】如何从 Activity 中获取 Widget 的 TextView 的文本?【英文标题】:How to get text of a TextView of a Widget from an Activity? 【发布时间】:2012-03-21 11:32:57 【问题描述】:

我有一个小部件和一个活动,当我启动活动时,我必须从小部件的 TextView 中读取文本并将其显示在活动的 TextWidget 中。

我的相关代码:

 String frase=""; 
 TextView text_frase = (TextView) findViewById(R.id.widget_textview_frase);
 if (text_frase != null)
    frase = (String) text_frase.getText();
 
 Log.v(LOG_CLASS_NAME, "frase: "+frase);

调试它 - 我将 text_frase 设为 null(我认为我无法从另一个视图引用视图对象。)无论如何,我该怎么做?

【问题讨论】:

你是从activity 1调用activity2吗?如果是,你需要在bundle中传递它 谢谢...但是您所说的activity1是一个小部件...我准备了一个未决的意图...所以我不能。而且...我需要获取有关活动开始的内容。 【参考方案1】:

不,你不能。我建议其中一种方式:

    将您的文本添加到 Bundle 并在您的 Activity 中获取它。

在您的小部件中:

Intent intent = new Intent(context, YourActivity.class);
Bundle b= new Bundle();
b.putString("Text", yourtext);
intent.putExtras(b);
PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, intent, PendingIntent.FLAG_CANCEL_CURRENT);

在你的活动中:

Intent intent=getIntent();
Bundle b= intent.getExtras();
String text= b.getString("Text", "");
    使用 SharedPreferences 保存您的文本并将其加载到活动中。

在你的情况下,我推荐方法1。

【讨论】:

太棒了...我认为 sharedPreferences 是最好的方法...第一个不好,因为我有一个更新 TextView 内容的服务。【参考方案2】:

您可能希望通过使用 TextView 上的 .toString() 方法来获取实际的字符串。

String frase; 

TextView text_frase = (TextView) findViewById(R.id.widget_textview_frase);
if (text_frase.getText().toString() != null)
   frase = (String) text_frase.getText().toString();
   Log.v(LOG_CLASS_NAME, "frase: "+frase);

【讨论】:

谢谢...但是名为 text_frase 的 TextView 为空...(正如我在答案中所写...)我想我找不到使用 Activity 中的 findViewById 的小部件。

以上是关于如何从 Activity 中获取 Widget 的 TextView 的文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何从Fragment到DataBinding访问Activity视图?

如何从主 Activity 获取视图

如何获取系统当前运行的activity对象

Flutter Bloc 如何从 Widget 本身更新 BlocBuilder 中的 Widget?

android 程序 如何从一个ACTIVITY跳转到另一个ACTIVITY,我的两个activity都在manifest上定义过的

Android--activity获取返回值