2

我只是想让一个简单的 TextView 在单击时在浏览器中打开一个链接。

XML:

    <TextView
        android:text="@string/account_sign_up_link"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/sign_up_link"
        android:autoLink="web"
        android:onClick="signUpLink"
        android:clickable="true" />

爪哇:

    public class signUpLink extends Activity {
        public void onClick(View v) {
            ...
        }
    }



我不明白为什么 Eclipse 不断抛出这个错误。

错误:

Illegal modifier for the local class signUpLink; only abstract or final is permitted



更新:

我的第一个问题是它在里面,protected void onCreate(Bundle savedInstanceState)所以我把它拿出来了。

最终我想出了这个:

public void signUpLink(View v){
    Uri uriUrl = Uri.parse("http://mysite.com/signup"); 
    Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);
    startActivity(launchBrowser);
}
4

5 回答 5

2

void 是变量 signUpLink 的无效类型

方法声明需要在类定义中进行。当试图在另一个方法中声明一个方法时,会报告与此类似的错误。

public class SignUpLink extends Activity {

    public void onCreate(Bundle bundle) {
           ...

    }
    public void signUpLink(View v) {
        //....Code here
    }
}

并遵循类的命名约定。

于 2013-03-12T05:34:03.237 回答
0

改变:

public class signUpLink extends Activity {
    public void onClick(View v) {
        ...
    }
}

至:

public void signUpLink(View v) {
    //Code from onClick(View v) goes here
}

此方法必须进入您使用 XML 布局的 Activity 类。当您指定为 XML 属性时,Android 会在布局已膨胀到的 Activity 中onClick查找具有该名称的方法,该方法将 a作为参数。View

之前,您正在创建一个新类,而不是一个新方法。

于 2013-03-12T05:28:40.677 回答
0

使用 Html.fromHtml

   Text1.setText(
        Html.fromHtml(
            "<a href=\"http://www.google.com\">Google</a> "));
    Text1.setMovementMethod(LinkMovementMethod.getInstance());
于 2013-03-12T05:44:01.630 回答
0

使用这个片段

    TextView url = ((TextView)findViewById(R.id.myWebSite));
    Linkify.addLinks(url, Linkify.WEB_URLS);

这对我有用。不要忘记在清单文件中定义互联网许可。

于 2013-03-12T05:47:46.043 回答
0

由于您的 xml 布局将TextView'onClick操作指定为“ ” signUpLink,因此Activity其内容视图是 xml 文件需要实现该方法,如下所示:

public class MyActivity extends Activity {
    @Override
    public void onCreate(final Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.your_layout_file);
    }

    public void signUpLink(final View view) {
        // Do signup action
    }
}

或者,如果您想在 a 中使用此布局Fragment并将逻辑封装到Fragment自身,则需要执行以下操作:

public class MyFragment extends Fragment {
    @Override
    public View onCreateView(final LayoutInflater inflater, final ViewGroup parent, final Bundle icicle) {
        final View view = inflater.inflate(R.layout.your_layout_file, parent, false);
        view.findViewById(R.id.sign_up_link).setOnClickListener(new View.OnClickListener() {
            @Override
            void onClick(View v) {
                /*MyFragment.this.*/signUpLink(v);
            }
        });
        return view;
    }

    private void signUpLink(final View view) {
        // Do signup action
    }
}
于 2013-03-12T06:05:23.593 回答