在Android Java中使用字符串参数重用onclick侦听器

红巨人

我正在模仿此线程中的代码来创建可重用的click事件,从而触发浏览器。我想在实例化类时传递自定义URL目标。该示例在eclipse中没有明显的错误,但是在启动时崩溃:

FATAL EXCEPTION: main 02-19 12:45:57.416: E/AndroidRuntime(12465): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app/com.app.ItemActivity}: java.lang.NullPointerException

错误应来自此行 btn.setOnClickListener(new ButtonInternetAccess("http://google.com"));

因为没有那条线就可以。该类是否ButtonInternetAccess无法返回导致空值的onClickListener?我该如何解决?

主要活动:

public class ItemActivity extends ActionBarActivity{
    private static final View View = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_item);
        Bundle b = i.getExtras();
        Button btn = (Button) findViewById(R.id.button_internet_access);
        btn.setOnClickListener(new ButtonInternetAccess("http://google.com"));      
    }
}

按钮类别:

public class ButtonInternetAccess extends Activity implements OnClickListener {
    String url;
    public ButtonInternetAccess(String url) {
        this.url = url;
    }

    public void onClick(View v) {
        try {
            Intent callIntent = new Intent(Intent.ACTION_CALL);
            callIntent.setData(Uri.parse(url));
            startActivity(callIntent); // No Error here

            System.out.println(url);
        } catch (ActivityNotFoundException activityException) {
            Log.e("Calling a Phone Number", "Call failed", activityException);
        }
    }

}

布局/ activity_item

<TextView
    android:id="@+id/response"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="" />

<include android:id="@+id/header" layout="@layout/button_internet_access">

布局/ button_internet_access:

<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/button_internet_access"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="go out" />

错误:

02-19 12:45:57.416: E/AndroidRuntime(12465): FATAL EXCEPTION: main
02-19 12:45:57.416: E/AndroidRuntime(12465): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app/com.app.ItemActivity}: java.lang.NullPointerException
02-19 12:45:57.416: E/AndroidRuntime(12465):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
02-19 12:45:57.416: E/AndroidRuntime(12465):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
02-19 12:45:57.416: E/AndroidRuntime(12465):    at android.app.ActivityThread.access$600(ActivityThread.java:130)
02-19 12:45:57.416: E/AndroidRuntime(12465):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
02-19 12:45:57.416: E/AndroidRuntime(12465):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-19 12:45:57.416: E/AndroidRuntime(12465):    at android.os.Looper.loop(Looper.java:137)
02-19 12:45:57.416: E/AndroidRuntime(12465):    at android.app.ActivityThread.main(ActivityThread.java:4745)
02-19 12:45:57.416: E/AndroidRuntime(12465):    at java.lang.reflect.Method.invokeNative(Native Method)
02-19 12:45:57.416: E/AndroidRuntime(12465):    at java.lang.reflect.Method.invoke(Method.java:511)
02-19 12:45:57.416: E/AndroidRuntime(12465):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-19 12:45:57.416: E/AndroidRuntime(12465):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-19 12:45:57.416: E/AndroidRuntime(12465):    at dalvik.system.NativeStart.main(Native Method)
02-19 12:45:57.416: E/AndroidRuntime(12465): Caused by: java.lang.NullPointerException
02-19 12:45:57.416: E/AndroidRuntime(12465):    at com.app.ItemActivity.onCreate(ItemActivity.java:29)
02-19 12:45:57.416: E/AndroidRuntime(12465):    at android.app.Activity.performCreate(Activity.java:5008)
02-19 12:45:57.416: E/AndroidRuntime(12465):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
02-19 12:45:57.416: E/AndroidRuntime(12465):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)

更新:

我设法按照此链接制作了一个插件

最终工作:

互联网类:

public class Internet implements OnClickListener {

    private String url;
    private Context context;

    public Internet(Context context, String url) {
        this.context = context;
        this.url = url;
    }

    @Override
    public void onClick(View v) {

        if (!url.contains("http://")){
            url = "http://"+url;
        }
        Intent callIntent = new Intent(Intent.ACTION_VIEW);
        callIntent.setData(Uri.parse(url));
        context.startActivity(callIntent);
    }
}

类StyleButton:

public class StyleButton extends Button{

    public StyleButton(Context context) {
        super(context);
    }

    public StyleButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        initStyleButton(attrs);
    }

    public StyleButton(Context context, AttributeSet attrs, int defStyle,String url) {
        super(context, attrs, defStyle);
        initStyleButton(attrs);
    }

    private void initStyleButton(AttributeSet attrs){
        TypedArray a = getContext().obtainStyledAttributes(attrs,R.styleable.style_Button);
        String Text1 = a.getString(R.styleable.style_Button_myText_1);
        String Text2 = a.getString(R.styleable.style_Button_myText_2);
        setText(Text1 + "\n" + Text2);
        String url = a.getString(R.styleable.style_Button_url);
        System.out.println(url);
        setOnClickListener(new Internet(getContext(),url));
        a.recycle();
    }
}

/ layout / item_activity

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:stylebutton= "http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:id="@+id/response"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text=""/>
<com.button.StyleButton
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    stylebutton:myText_1="My Text 1"
    stylebutton:myText_2="My Text 2"
    stylebutton:url="www.google.com"
    />
<com.button.StyleButton
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    stylebutton:myText_1="Hello!"
    stylebutton:myText_2="It's a Style Button:)"
    stylebutton:url="www.yahoo.com"
    />

/value/attr.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="style_Button">
        <attr name="myText_1" format="string" />
        <attr name="myText_2" format="string" />
        <attr name="url" format="string" />
    </declare-styleable>
</resources>
德格哈卡

创建您的自定义按钮,然后在您的项目中使用它,从而可以在全球范围内使用它。

    public class ButtonInternetAccess extends UIButton implements OnClickListener {
        String url;
    Context mContext;
    public ButtonInternetAccess(Context context, AttributeSet attrs,String url) {
            super(context, attrs);
         this.url = url;
        this.mContext=mContext;
            // TODO Auto-generated constructor stub
        }
        // initialize button and add click listener here.

}

您可以将该按钮添加到您的xml中,例如

<yourpackagename.ButtonInternetAccess 
height=""
width = ""
other properties to include
/>

希望这会有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android Button onClick侦听器错误?

来自分类Dev

Android中通知按钮的Onclick侦听器

来自分类Dev

Android WearGridViewPager onClick侦听器

来自分类Dev

Scrollview侦听器无法在Android的Xamarin中使用?

来自分类Dev

Android Button Onclick侦听器不起作用

来自分类Dev

Android / Java:使用字符串索引中的char设置textview

来自分类Dev

Android:RecyclerView onClick侦听器未获取

来自分类Dev

在Android Studio中使用字符串资源翻译文本

来自分类Dev

如何在Android中使用不同的参数格式化不同语言的字符串?

来自分类Dev

Android如何在带有数据绑定的TextView中使用字符串变量

来自分类Dev

在Android中的Java文件中使用字符串

来自分类Dev

Java Android侦听器

来自分类Dev

使用字符串问题android

来自分类Dev

Firebase侦听器在Java(Android)中被阻止

来自分类Dev

Android使用字符串数组填充微调器

来自分类Dev

Android小部件onclick侦听器中的几个按钮

来自分类Dev

ItemOnClick侦听器Android

来自分类Dev

Android中通知按钮的Onclick侦听器

来自分类Dev

如何在Android中使用字符串名称调用资源?

来自分类Dev

android Wear gridviewpager onClick侦听器

来自分类Dev

Android Button Onclick侦听器不起作用

来自分类Dev

如何在Android中使用字符串数组引用媒体文件?

来自分类Dev

通过在android中开发在sqlite中使用字符串和数组创建表

来自分类Dev

输入侦听器Java [Android Studio]

来自分类Dev

在Android Studio中使用字符串资源翻译文本

来自分类Dev

如何在Android中使用字符串检查密码

来自分类Dev

在 Kotlin 中设置 Android 侦听器 - 在 lambdas 中使用 return

来自分类Dev

在android的url中使用字符串变量代替ip地址?

来自分类Dev

android studio(java)用字符串查找视图ID

Related 相关文章

  1. 1

    Android Button onClick侦听器错误?

  2. 2

    Android中通知按钮的Onclick侦听器

  3. 3

    Android WearGridViewPager onClick侦听器

  4. 4

    Scrollview侦听器无法在Android的Xamarin中使用?

  5. 5

    Android Button Onclick侦听器不起作用

  6. 6

    Android / Java:使用字符串索引中的char设置textview

  7. 7

    Android:RecyclerView onClick侦听器未获取

  8. 8

    在Android Studio中使用字符串资源翻译文本

  9. 9

    如何在Android中使用不同的参数格式化不同语言的字符串?

  10. 10

    Android如何在带有数据绑定的TextView中使用字符串变量

  11. 11

    在Android中的Java文件中使用字符串

  12. 12

    Java Android侦听器

  13. 13

    使用字符串问题android

  14. 14

    Firebase侦听器在Java(Android)中被阻止

  15. 15

    Android使用字符串数组填充微调器

  16. 16

    Android小部件onclick侦听器中的几个按钮

  17. 17

    ItemOnClick侦听器Android

  18. 18

    Android中通知按钮的Onclick侦听器

  19. 19

    如何在Android中使用字符串名称调用资源?

  20. 20

    android Wear gridviewpager onClick侦听器

  21. 21

    Android Button Onclick侦听器不起作用

  22. 22

    如何在Android中使用字符串数组引用媒体文件?

  23. 23

    通过在android中开发在sqlite中使用字符串和数组创建表

  24. 24

    输入侦听器Java [Android Studio]

  25. 25

    在Android Studio中使用字符串资源翻译文本

  26. 26

    如何在Android中使用字符串检查密码

  27. 27

    在 Kotlin 中设置 Android 侦听器 - 在 lambdas 中使用 return

  28. 28

    在android的url中使用字符串变量代替ip地址?

  29. 29

    android studio(java)用字符串查找视图ID

热门标签

归档