【问题标题】:Linking TextViews链接文本视图
【发布时间】:2013-08-04 03:22:01
【问题描述】:

在尝试操作 TextView 框时,我不断收到空指针错误。我发现我的 TextView 框没有链接到我的代码,尽管我已将它设置为正确的 ID。我不知道问题是什么。我以相同的方式链接我所有的 TextView,这是我第一次遇到这个问题。这是我的 XML 文件中定义 TextView 属性的部分。

<TextView
    android:id="@+id/textviewH"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/imageView1"
    android:layout_alignTop="@+id/textView5"
    android:layout_marginLeft="64dp"
    android:text="@string/HumiumLink"
    />

这是我的 java 文件

    AlertDialog.Builder dialog = new AlertDialog.Builder(this);
    View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.activity_about_t2m, null);

    Tv = ((TextView) findViewById(R.id.textviewH));
    if (Tv != null) 
    {
        Tv.setMovementMethod(LinkMovementMethod.getInstance());

    }
    dialog.setView(view);
    dialog.setTitle("About T2M");
    dialog.setIcon(R.drawable.ic_launcher);
    dialog.setCancelable(false);
    dialog.setPositiveButton(android.R.string.ok,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id)
                {
                    dialog.cancel();
                }
            } 
    );

    dialog.create();  
    dialog.show();

我发现 if 语句中的代码永远不会执行,这意味着 Tv 为空。 Logcat 甚至显示了一个我以前从未见过的奇怪错误。 ![LogCat 错误消息][1] 我用蓝色圈出来了。这令人沮丧。

EDIT1:

这都是针对从主活动执行的名为 AboutT2M 的菜单的一部分。以下是我主要活动的菜单代码

public boolean onOptionsItemSelected(MenuItem item) {
    // Handle presses on the action bar items
    switch (item.getItemId()) {
        case R.id.AboutMorseID:
            Intent AboutMorseI = new Intent(this, About_Morse.class);
            startActivity(AboutMorseI);
            break;
        case R.id.SettingsID:
            Intent SettingsI = new Intent(this, SettingsActivity.class);
            startActivity(SettingsI);
            break;
        case R.id.ReadMeID:
            Intent ReadMeI = new Intent(this, ReadMe.class);
            startActivity(ReadMeI);
            break;
        case R.id.AboutT2MID:
            Intent AboutT2MI = new Intent(this, About_T2M.class);
            startActivity(AboutT2MI);
            break;
        default:

    }
    return true;
}

[1]:http://i.stack.imgur.com/vRH7Q.png强调文字

【问题讨论】:

  • 你在textview上应用onClick效果吗?我们可以看看您如何开始活动的代码吗?你在做 context.startActivity(Intent) 吗?
  • 我想在文本视图中放一个可点击的超链接

标签: android null textview


【解决方案1】:

你的问题就在这里:

View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.activity_about_t2m, null);

你在膨胀R.layout.activity_about_t2m。在下一行,你尝试初始化Tv

Tv = ((TextView) findViewById(R.id.textviewH));

现在,尚不清楚R.id.textviewH 是否在R.layout.activity_about_t2m 中。如果是,那么上面这行代码应该改成:

Tv = ((TextView) view.findViewById(R.id.textviewH));

因为您需要膨胀的view 才能找到Tv

如果它不在R.layout.activity_about_t2m 中,那么它应该在R.layout.main_layout_file_name 中,因为 findViewById() 将尝试在您与setContentView() 一起使用的布局文件中找到它。

【讨论】:

  • R.id.textviewH 在布局中,但即使代码更改为 Tv = ((TextView) view.findViewById(R.id.textviewH));我仍然在 logcat 中看到相同的错误。但我确实注意到现在 Tv 不再为空。
  • 你说的是哪个代码? Java 代码位于菜单活动中。最后一段代码在 main Activity 中。
  • 您在Intent AboutMorseI = new Intent(this, About_Morse.class); 中使用thisthis 代表什么?
  • 你为什么不用我给你的代码?有用 ! stackoverflow.com/questions/18033479/spannable-string-error/…
【解决方案2】:

检查这一行的上下文(getApplicationContext())......

View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.activity_about_t2m, null);

尝试使用 YourActivity.this 而不是 getApplicationContext() 。

【讨论】:

  • 它编译并运行。 Textview 不再为空,但单击链接时应用程序仍然崩溃。问题可能出在我定义链接的方式上吗?这是 logcat 输出:LogCat Screen Shot
  • 它显示 Activity not found exception ,这意味着您尚未在项目清单中添加活动(待启动)。尝试添加它,它应该可以工作。
猜你喜欢
  • 1970-01-01
  • 2012-04-08
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 2016-07-17
  • 2012-04-15
相关资源
最近更新 更多