无法使用第二个布局中的Web链接

问题描述 投票:0回答:2

所以我有一个简单的程序,它有一个图像和一个按钮。单击该按钮时,将打开一个带有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文件。

任何帮助将不胜感激。

java android layout hyperlink
2个回答
0
投票

更好的选择是链接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);

0
投票

所以我通过将此代码分解为两个活动来解决我的问题。主要活动和片段活动。

主要活动:

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();
}
}

可能有更好的方法,但这对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.