Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

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

$
0
0

平时习惯写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);
            }
        });

最后,感谢小马 的文章!



 

作者:ssh159 发表于2017/3/22 15:47:17 原文链接
阅读:59 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>