Android:在Fragment中,onClick失效的解决方法

平时习惯写onclic方法,

但是有时候不是在Activity中,比如:Fragment中用onclick无效,
只能用 id 跳转或者弹框

比如按钮 Button 或者 Lineayout 布局

这里有3个id ,三个弹框显示


<Button  
        android:onClick="onclick1"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="按钮一"  />  
   <Button  
        android:onClick="onclick2"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="按钮二"  />  
   <Button  
        android:onClick="onclick3"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="按钮三"  />  



方法:

在Fragment 中不能直接:

public void 单击方法(View view){

......

}

只能 这样:

在 onActivityCreated方法中,获取id,再setOnClickListener

this 也改为:getActivity()


方法:

public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        Button b1=(Button) getActivity().findViewById(R.id.b1);
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder builder=new Builder(getActivity());
                builder.setIcon(R.drawable.meiqin); //设置图标
                builder.setTitle("需要加入阿库西斯教吗?");//设置对话框的标题
                builder.setMessage("你确定要入教吗?");//设置对话框的内容
                builder.setPositiveButton("确定", new OnClickListener() {  //这个是设置确定按钮

                    @Override
                    public void onClick(DialogInterface arg0, int arg1) {
                        Toast.makeText(getActivity(), "入教成功!", Toast.LENGTH_SHORT).show();

                    }
                });
                builder.setNegativeButton("取消", new OnClickListener() {  //取消按钮

                    @Override
                    public void onClick(DialogInterface arg0, int arg1) {
                        Toast.makeText(getActivity(), "入教失败!",Toast.LENGTH_SHORT).show();

                    }
                });
                AlertDialog b=builder.create();
                b.show();  //必须show一下才能看到对话框,跟Toast一样的道理
            }
        });

        Button b2=(Button) getActivity().findViewById(R.id.b1);
        b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder builder=new Builder(getActivity());
                builder.setIcon(android.R.drawable.ic_dialog_info);
                builder.setTitle("请选择性别");
                final String []items=new String[]{"男","女"};
                builder.setSingleChoiceItems(items, -1, new OnClickListener() {
                    //which指的是用户选择的条目的下标
                    //dialog:触发这个方法的对话框
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getActivity(), "您选择的是:"+items[which], Toast.LENGTH_SHORT).show();
                        dialog.dismiss();//当用户选择了一个值后,对话框消失

                    }
                });
                builder.show();//这样也是一个show对话框的方式,上面那个也可以
            }
        });

        Button b3=(Button) getActivity().findViewById(R.id.b1);
        b3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder builder=new Builder(getActivity());
                builder.setIcon(android.R.drawable.ic_dialog_info);
                builder.setTitle("请选择你觉得萌的人");
                final String []itemsId=new String[]{"和真","阿库娅","惠惠","达克尼斯"};
                final boolean []checkedItems=new boolean[]{true,true,false,false};//这里的true是默认第几个人已经被选中
                builder.setMultiChoiceItems(itemsId, checkedItems,new OnMultiChoiceClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which, boolean ischeck) {
                        checkedItems[which]=ischeck;
                    }
                });
                //设置一个确定按钮
                builder.setPositiveButton("确定", new OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int whick) {
                        String text="";
                        for(int i=0;i<itemsId.length;i++)
                        {
                            text+=checkedItems[i]?itemsId[i]+",":"";
                        }

                        Toast.makeText(getActivity(), text, Toast.LENGTH_SHORT).show();
                        dialog.dismiss();
                    }
                });
                builder.show();
            }
        });


同样,页面跳转在 方法中写:

//根据ID跳转 微信页面
        LinearLayout l2=(LinearLayout) getActivity().findViewById(R.id.weixin);
        l2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v1) {
                Intent intent = new Intent(getActivity(), WeiXinActivity.class);
                startActivity(intent);
            }
        });

最后,感谢小马 的文章!



 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值