0

在尝试操作 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] 我用蓝色圈出了它。这令人沮丧。

编辑1:

这都是针对从主活动执行的名为 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强调文字

4

2 回答 2

0

检查此行的上下文 (getApplicationContext())....

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

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

于 2013-08-04T04:25:38.033 回答
0

你的问题就在这里:

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.textviewHR.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()

于 2013-08-04T03:56:35.470 回答