在尝试操作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 强调文字
答案 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()。