链接TextViews

时间:2013-08-04 03:22:02

标签: android null textview

在尝试操作TextView框时,我不断收到空指针错误。我发现我的TextView框没有链接到我的代码,尽管我已经将它设置为正确的ID。我不知道问题是什么。我以同样的方式链接我的所有TextViews,这是我第一次遇到这个问题。这是我的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为null。 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 强调文字

2 个答案:

答案 0 :(得分: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.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()的布局文件中找到它。

答案 1 :(得分:0)

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

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

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