无法使用第二个布局中的Web链接
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法使用第二个布局中的Web链接相关的知识,希望对你有一定的参考价值。
所以我有一个简单的程序,它有一个图像和一个按钮。单击该按钮时,将打开一个带有Web链接的警告对话框。
我的问题是让Web链接工作而不会崩溃应用程序(给出一个空对象引用错误)。
我查看了Layoutinflaters和Fragments,但似乎无法让程序按我的意愿行事。
package com.test.test;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView mShowDialog = findViewById(R.id.btnShowDialog);
mShowDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder mBuilder = new AlertDialog.Builder(MainActivity.this);
View mView = getLayoutInflater().inflate(R.layout.info_popup, null);
mBuilder.setView(mView);
AlertDialog dialog = mBuilder.create();
dialog.show();
//link is null
TextView link = findViewById(R.id.linkText);
//Crashes the app before it starts
link.setMovementMethod(LinkMovementMethod.getInstance());
}
});
}
}
我相信错误源于此代码,但会根据请求提供xml文件。
任何帮助将不胜感激。
答案
更好的选择是链接XML。您似乎没有在代码中设置它,因此上述内容都是不必要的。这是一个例子。
<TextView
android:id="@+id/lnkHelpInfo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:layout_marginTop="25dp"
android:linksClickable="true"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:autoLink="web"
android:text="https://www.google.com"/>
如果您希望在代码中执行此操作,因为您希望文本显示不同的内容,那么使用linkmethod并不能真正为您提供任何值。只需将文字下划线和蓝色。然后处理代码。
Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(myIntent);
另一答案
所以我通过将此代码分解为两个活动来解决我的问题。主要活动和片段活动。
主要活动:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupPopup();
}
private void setupPopup() {
ImageView btn = findViewById(R.id.btnShowDialog);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager manager = getSupportFragmentManager();
PopupFragment dialog = new PopupFragment();
dialog.show(manager, "MessageDialog");
}
});
}
}
片段活动:
public class PopupFragment extends AppCompatDialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
View v = LayoutInflater.from(getActivity())
.inflate(R.layout.info_popup, null);
final TextView link = v.findViewById(R.id.linkText);
link.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
link.setMovementMethod(LinkMovementMethod.getInstance());
}
});
return new AlertDialog.Builder(getActivity())
.setView(v)
.create();
}
}
可能有更好的方法,但这对我有用。
以上是关于无法使用第二个布局中的Web链接的主要内容,如果未能解决你的问题,请参考以下文章
想要使用 SharePreferences 更新第二个片段中的数据,但第二个片段没有更新