Android 自定义view中可以改变activity的数据吗?或者说传值给Activity

自定义view中可以改变activity的数据吗?或者说传值给Activity

3个回答

可以的,用回调。。。。。。在自定义View中定义个接口,Activity实现接口

方法太多了,回调,扩大变量作用域,广播,数据存储等等,优选前两个。

自定义view中设置自定义的listener

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android如何在activity中设置自定义view中的数据
我在一个自定义的view中设置了一个循环执行的动画,然后在activity中使用这个view,希望通过 点击能够停止动画的执行,首先我尝试在view中提供有一个public的方法,在activity中 点击的时候,通过这个方法调用动画的cancel()方法来结束,但是没有成功,之后我尝试在 view中设置一个boolean值,通过这个值判断动画是否应该执行,同时提供public void set 方法来设置这个值,并通过invalidate()来重绘整个view,但是在Activity中调用这个方法之后 还是没有任何效果!请大神来看看是怎么回事!
Android中 activity怎么调用自定义view中重绘的方法?
android中,在activity里调用自定义view的postInvalidate()和invalidate()方法,自定义view中并没有重新绘制,当然在自定义view本类中调用是可以实现重新绘制的。求大神指导,是我调用方法不对? 还是有其他重新绘制方法可以供activity调用?
Android中 activity调用自定义view中的重绘方法不起作用?
android中,在activity里调用自定义view的postInvalidate()和invalidate()方法,自定义view中并没有重新绘制,当然在自定义view本类中调用是可以实现重新绘制的。求大神指导,是我调用方法不对? 还是有其他重新绘制方法可以供activity调用?![在Activity中发消息给自定义view,发送1过去,是可以停止绘制的。发送0过去,不能继续绘制](https://img-ask.csdn.net/upload/201608/02/1470116592_265607.png) ![自定义view中给一个标志位,用来控制绘制和停止绘制](https://img-ask.csdn.net/upload/201608/02/1470116583_787821.png) ![自定义view中接收activity中消息的handler](https://img-ask.csdn.net/upload/201608/02/1470116624_406969.png)
Android在自定义View控制Activity里控件
最近在学习Android,想做一个效果遇到了困难。我自定义了一个View,然后在View里设置触摸事件,点击一个出现一个按钮, 再点击一下按钮消失。我不知道怎么在自定义View里添加Button,就放在了布局了。但是用在自定义View设置的点击事件来控 制布局里的按钮?跪谢跪谢。
Android中能在一个自定义view中注册广播并发出广播吗
我写的一个Android程序中自定义了一个view,自己画了一个钟表,那个钟表可以调时间,因为调时间的过程中数据是不停的变化的,我想让这变化不停的时间显示在自定义view底下的TextView,虽然我写了一个get方法得到时间并显示在textView中,到get方法只执行了一次,所以并没有变化更新效果,所以我想法是在自定义view中发送广播,只要是表在调整就一直发送最新数据,可是好广播一直报错,是不是广播只能在activity中才能发送,或者各位大神有更好的思路吗?
Android 自定义View 参数
这是我自定义View 的源码: public class MyView extends View { private float px; private float py; private int flag ; private Bitmap map; public MyView(Context context,float p_x,float p_y,int flag) { super(context); this.px=p_x; this.py=p_y; this.flag=flag; System.out.println(px); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); System.out.println("2"); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); if(flag==1){ map=BitmapFactory.decodeResource(getResources(), R.drawable.star_circle_mo); } else{ map=BitmapFactory.decodeResource(getResources(), R.drawable.star_circle_mo1); } System.out.println("p_x"+px); System.out.println("p_y"+py); canvas.drawBitmap(map, 45.0f, 180.0f, null); } } 在这里面调用它: public class PicBuyDemo extends Activity { private ImageView iv; private MyView myView; private MyView ball; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); iv=(ImageView)findViewById(R.id.iv); ball=(MyView)findViewById(R.id.myView_01); iv.setBackgroundResource(R.drawable.j1); myView =new MyView(this,80.0f,70.0f,1); iv.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { ball.setVisibility(View.VISIBLE); return false; } }); } } 布局文件: <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/ll" > <ImageView android:id="@+id/iv" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <com.cyc.MyView android:id="@+id/myView_01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" > </com.cyc.MyView> </FrameLayout> 为什么在自定义View的ondraw()方法里px,py总是为0.0,flag=0
Android自定义view失败
主activity名为MyPaint,其对应的布局文件为paint_layout.xml,我声明了一个MyView继承了view,代码如下: ``` package com.example.wifidetection; ··· public class MyPaint extends ActionBarActivity { ··· protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.paint_layout); ``` 在paint_layout.xml中是这样写的 `` <com.example.wifidetection.MyPaint android:layout_width="fill_parent" android:layout_height="wrap_content" /> ``` Myview是这样: ``` public class MyView extends View { ··· public MyView(Context context , AttributeSet attrs){ //public MyView(Context context){ super(context , attrs); ``` 但这样写了之后,在paint_layout.xml的Graphical Layout里面就会显示: The following classes could not be instantiated: - com.example.wifidetection.MyPaint (Open Class, Show Error Log) 我是彩笔,求大神解答,感激!
Android自定义控件在ListView中不显示
在Android中定义了一个MyTextView extends View,在Activity中使用的时候,高度设置为wrapcontent可以正常显示,但是在Listview中高度设置为wrapcontent就会变成0,显示不出来我的View,需要固定高度为100dip等,这中问题可以解决吗.
Android 动态切换标题栏里用户自定义view , view里button的点击事件不响应
Android 动态切换标题栏里用户自定义view , view里button的点击事件不响应, 具体方式是:在activity里,找到view里的button,并设置点击事件,结果点了没反应
Android 自定义View点击事件
# 给自定义小图标(箭头所指)添加OnclickListener(); # 结果 # 只要点击屏幕就会响应了 刚接触Android不久,不知道哪里的问题,求大神指点。 ![图片说明](https://img-ask.csdn.net/upload/201511/05/1446715229_242966.png) ``` public class Map extends Fragment implements OnClickListener { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub View root = inflater.inflate(R.layout.map, container, false); FrameLayout frameLayout = (FrameLayout) root .findViewById(R.id.maplayout); /** * 新建一个图标 * * @author prohan * @param Context * context int x ,int y 添加的点的左上角位置 int id 设置节点ID */ final Myview myview = new Myview(this.getActivity(), 830, 880); myview.setOnClickListener(this); myview.setId(10); frameLayout.addView(myview); return root; } public void onAttach(Activity activity) { super.onAttach(activity); } class Myview extends View { public int bitmapx; public int bitmapy; public Myview(Context context, int x, int y) { super(context); this.bitmapx = x; this.bitmapy = y; } @Override protected void onDraw(Canvas canvas) { Paint point = new Paint(); point.setAlpha(150); Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.point); canvas.drawBitmap(bitmap, null, new Rect(bitmapx, bitmapy, bitmapx + 60, bitmapy + 100), point); // canvas.drawRect(0, 0, getWidth(), getHeight(), mPaint); // canvas.drawBitmap(bitmap, bitmapx, bitmapy, point); } } // Onclick中的方法 private void alertmessage() { AlertDialog alert = new AlertDialog.Builder(this.getActivity()) .create(); alert.setIcon(R.drawable.ic_launcher);// 设置对话框的图标 alert.setTitle("当前站点信息:"); alert.setMessage("XXXXXXXXXXXXXXXX"); alert.show(); } @Override public void onClick(View v) { switch (v.getId()) { case 10: Toast.makeText(getActivity(), "#" + v.getId() + "#" + "8号楼监测站", Toast.LENGTH_SHORT).show(); alertmessage(); break; default: break; } } } ``` # 如果能告诉我如何能让myview跳动起来就最好啦
android 关于自定义view的问题
public class MyLayout extends RelativeLayout{ private Context context; public MyLayout(Context context){ super(context); this.context = context; RelativeLayout main = new RelativeLayout(context); RelativeLayout.LayoutParams lp_main_view = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT); main.setBackgroundColor(Color.parseColor("#FF00FF")); main.setLayoutParams(lp_main_view); /*GifView gif_view = new GifView(context); gif_view.setGifImage(R.drawable.gif_test); RelativeLayout.LayoutParams lp_gif_view = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); lp_gif_view.addRule(RelativeLayout.ALIGN_PARENT_TOP); lp_gif_view.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); // btn1 位于父 View 的顶部,在父 View 中水平居中 main.addView(gif_view, lp_gif_view);*/ TextView t = new TextView(context); t.setText("怎么就不显示呢"); RelativeLayout.LayoutParams lp_t_view = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); lp_t_view.addRule(RelativeLayout.ALIGN_PARENT_TOP); lp_t_view.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); main.addView(t, lp_t_view); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); } /** * 测量尺寸时的回调方法 */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } 以上是我自定义的view 我在activity里 MyLayout myLayout = new MyLayout(this); setContentView(myLayout); 以这种方式加载 为什么显示不出来 求解
是用一个Activity对应一个界面,还是一个个自定义的View对应一个界面
从网上看到的很多例子都是:整个应用一个Activity,然后所有的界面采用自定义的派生自View的类实现,比如:MenuView、SplashView、HelpAboutView,在Activity中根据应用的状态(状态机形式),用setContentView来切换各个视图,这样就是一个View对应一个界面。还有一种写法,就是用一个Activity来对应一个界面,根据应用的状态在各个Activity间进行切换。我想问下这两种写法谁优谁劣,各有什么优点和弊端;在什么情况下应该用一个Activity对应一个界面,什么情况下用一个View对应一个界面?
Android自定义Button的OnKeyDown方法没反应
代码如下: 自定义Button类 public class MyButton extends Button{ public MyButton(Context context,AttributeSet set) { super(context,set); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { super.onKeyDown(keyCode,event); TextView tv = (TextView) findViewById(R.id.aa); tv.setText("123232323"); Log.v("111","2222"); return super.onKeyDown(keyCode, event); } } 界面xml代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:orientation="vertical" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:id="@+id/aa" android:layout_width="match_parent" android:layout_height="wrap_content" /> <com.example.cg.view.MyButton android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
Android Studio自定义布局中的Button不响应点击事件
最近开始跟着郭霖大神的《第一行代码》学习Android开发,遇到一个问题 自定义布局之后,模拟器运行时Button不响应单击事件 代码如下 MainActivity.java package com.example.uilayouttest; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar actionBar = getSupportActionBar(); if (actionBar != null){ actionBar.hide(); } } } activity_main.xml文件 <?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!--android:orientation="horizontal"--> <include layout="@layout/title"/> <com.example.uilayouttest.TitleLayout android:layout_width="match_parent" android:layout_height="wrap_content"> </com.example.uilayouttest.TitleLayout> </LinearLayout> title.xml文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="65dp" android:background="@drawable/back_bg" > <Button android:id="@+id/title_back" android:layout_width="60dp" android:layout_height="60dp" android:layout_gravity="top" android:layout_margin="5dp" android:text="Back" android:textColor="#fff"/> <TextView android:id="@+id/title_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="top" android:layout_weight="1" android:gravity="center" android:text="Title Text" android:textColor="#fff" android:textSize="28sp"/> <Button android:id="@+id/title_edit" android:layout_width="60dp" android:layout_height="60dp" android:layout_gravity="top" android:layout_margin="5dp" android:background="@drawable/edit" android:text="" /> </LinearLayout> TitleLayout.java类 package com.example.uilayouttest; import android.app.Activity; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.Toast; public class TitleLayout extends LinearLayout { public TitleLayout(Context context, AttributeSet attrs){ super(context,attrs); LayoutInflater.from(context).inflate(R.layout.title, this); Button titleBack = (Button) findViewById(R.id.title_back); Button titleEdit = (Button) findViewById(R.id.title_edit); titleBack.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ((Activity) getContext()).finish(); Log.d("data", "onClick:到底有没有点击我 "); Toast.makeText(getContext(), "你点击了Back按钮", Toast.LENGTH_SHORT).show(); } }); titleEdit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(), "你点击了Edit按钮", Toast.LENGTH_SHORT).show(); } }); } } ``` ```
自定义组件:在使用自定义组件的Activity修改Paint画笔画的长方形颜色
自定义组件:自定义类MyView继承View,Paint画笔画的长方形绿色 我想在使用MyView组件的Activity控制长方形的颜色,不通过重绘,有什么方法修改长方形画笔颜色? public MyView extends View{ public MyView(Context context, AttributeSet attributes){ super(context,attributes) //初始化画笔 paint=new Paint(); paint.setColor(Color.GREEN); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(8); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawRect(50,50,200,200,paint); } }
android自定义控件按钮无法点击
TitleLayout.java ``` package com.example.uicustomviews; import android.app.Activity; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.Toast; public class TitleLayout extends LinearLayout { public TitleLayout(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.title, this); Button titleBack = (Button) findViewById(R.id.title_back); Button titleEdit = (Button) findViewById(R.id.title_edit); titleBack.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ((Activity) getContext()).finish(); } }); titleEdit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(), "You clicked Edit button", Toast.LENGTH_SHORT).show(); } }); } } ``` MainActivity.java ``` package com.example.uicustomviews; import android.app.Activity; import android.os.Bundle; import android.view.Window; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); } } ``` title.xml ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/title_bg" > <Button android:id="@+id/title_back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dip" android:background="@drawable/back_bg" android:text="Back" android:textColor="#fff" /> <TextView android:id="@+id/title_text" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:gravity="center" android:text="This is Title" android:textColor="#fff" android:textSize="22sp" /> <Button android:id="@+id/title_edit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dip" android:background="@drawable/edit_bg" android:text="Edit" android:textColor="#fff" /> </LinearLayout> ``` activity_main.xml ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <include layout="@layout/title" /> <com.example.uicustomviews.TitleLayout android:layout_width="match_parent" android:layout_height="wrap_content" > </com.example.uicustomviews.TitleLayout> </LinearLayout> ``` 求助 折腾了好久 导入别人的工程 上面这四份代码完全一样 别人的点击有反应 自己的没反应
android自定义ViewGroup的问题
在名为Demo的activity中用到了一个继承ViewGroup的类MyView来布局,具体是这样的 在Demo的布局文件xml中,<MyView android:id="@+/view1"> 在Demo的代码中 MyView scroll = (MyView) findViewById(R.id.view1); 在MyView中的构造函数 public MyView(Context context, AttributeSet attrs) { //各类操作 } 问题是Demo需要给scroll传参数,使其根据参数的不同,来做不同的布局,请问这个参数怎么传?(由于我的scroll并不是new出来的,所以在也不能利用构造函数传参。sharedPrerence只有在activity里面使用,也不适合这种情况)
android 自定义camera 自动拍照
可以自动拍照的是魅族android版本5.01,不能自动拍照的是android版本5.1。是系统问题吗? 自动拍照功能在一些手机上可以使用,一些不能用。求原因 。坐等答案。 ``` public class CameraActivity extends Activity { private CameraView view; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().clearFlags( WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE);// 设置横屏模式以及全屏模式 view = new CameraView(this);// 通过一个surfaceview的view来实现拍照 view.setId(1); view = new CameraView(this, this); setContentView(R.layout.camera_layout); RelativeLayout relative = (RelativeLayout) this.findViewById(R.id.ly); RelativeLayout.LayoutParams Layout = new RelativeLayout.LayoutParams(3, 3);// 设置surfaceview使其满足需求无法观看预览 Layout.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1); Layout.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, 1); relative.addView(view, Layout); } } (2) CameraView.java package com.camera.test; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Point; import android.graphics.PointF; import android.hardware.Camera; import android.hardware.Camera.AutoFocusCallback; import android.hardware.Camera.ShutterCallback; import android.media.AudioManager; import android.media.FaceDetector; import android.media.FaceDetector.Face; import android.os.Environment; import android.os.Handler; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.widget.Toast; public class CameraView extends SurfaceView implements SurfaceHolder.Callback, Camera.PictureCallback { private SurfaceHolder holder; private Camera camera; private Camera.Parameters parameters; private Activity act; private Handler handler = new Handler(); private Context context; private SurfaceView surfaceView; private AudioManager audio; private int current; public CameraView(Context context) { super(context); surfaceView = this; audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); final int current = audio.getRingerMode(); audio.setRingerMode(AudioManager.RINGER_MODE_SILENT); this.context = context; holder = getHolder();// 生成Surface Holder holder.addCallback(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// 指定Push Buffer handler.postDelayed(new Runnable() { @Override public void run() { if (camera == null) { handler.postDelayed(this, 1 * 1000);// 由于启动camera需要时间,在此让其等两秒再进行聚焦知道camera不为空 } else { camera.autoFocus(new AutoFocusCallback() { @Override public void onAutoFocus(boolean success, Camera camera) { if (success) { camera.takePicture(new ShutterCallback() {// 如果聚焦成功则进行拍照 @Override public void onShutter() { } }, null, CameraView.this); } else { } } }); } } }, 2 * 1000); } public CameraView(Context context, Activity act) {// 在此定义一个构造方法用于拍照过后把CameraActivity给finish掉 this(context); this.act = act; } @Override public void surfaceCreated(final SurfaceHolder holder) { // TODO Auto-generated method stub camera = Camera.open();// 摄像头的初始化 handler.postDelayed(new Runnable() { @Override public void run() { if (holder != null) { try { camera.setPreviewDisplay(holder); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { handler.postDelayed(this, 1 * 1000); } } }, 2 * 1000); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub parameters = camera.getParameters(); camera.setParameters(parameters);// 设置参数 camera.startPreview();// 开始预览 } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub } public void onPictureTaken(byte[] data, Camera camera) {// 拍摄完成后保存照片 try { Date date = new Date(); SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); String time = format.format(date); //在SD卡上创建文件夹 File file = new File(Environment.getExternalStorageDirectory() + "/myCamera/pic"); if (!file.exists()) { file.mkdirs(); } String path = Environment.getExternalStorageDirectory() + "/myCamera/pic/" + time + ".jpg"; data2file(data, path); camera.setPreviewCallback(null); camera.stopPreview(); camera.release(); camera = null; holder.removeCallback(CameraView.this); audio.setRingerMode(current); act.finish(); //uploadFile(path); } catch (Exception e) { } } private void data2file(byte[] w, String fileName) throws Exception {// 将二进制数据转换为文件的函数 FileOutputStream out = null; try { out = new FileOutputStream(fileName); out.write(w); out.close(); } catch (Exception e) { if (out != null) out.close(); throw e; } } // private void uploadFile(String filePath)// 拍照过后上传文件到服务器 // { // } } ```
Android自定义控件中为Button设置自定义监听器出现空指针。
Android自定义TopBar中给ImageButton设置自定义点击监听器,当点击ImageButton时在listener处出现NullPointerException。 会出错的地方我在后面写了//TODO 。 请问为什么会出现listener没有被实例化的情况? 还有为什么在MainActivity中使用findViewById实例化TopBar也会出现不能实例化控件的情况? IDE : Android Studio ; Compile Sdk Version : API 23 ; Build Tool Version : 23.0.1 ; Min Sdk Version : API 15 ; Target Sdk Version : API 19 ; 部分代码: #MainActivity.java ``` public class MainActivity extends AppCompatActivity { private TopBar topBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // topBar = (TopBar) findViewById(R.id.topBar); //TODO 这样无法实例化topBar ??? topBar = new TopBar(getApplicationContext(), null); if (topBar == null) { Toast.makeText(MainActivity.this, "NULL", Toast.LENGTH_SHORT).show(); } topBar.setOnTopBarClickListener(new TopBar.OnClickListener() { @Override public void onLeftButtonClick() { Toast.makeText(MainActivity.this, "Left", Toast.LENGTH_SHORT).show(); } @Override public void onRightButtonClick() { Toast.makeText(MainActivity.this, "Right", Toast.LENGTH_SHORT).show(); } }); } } ``` #TopBar.java ``` public class TopBar extends RelativeLayout { private ImageButton ibtLeft; private ImageButton ibtRight; private TextView tvTitle; private OnClickListener listener; public interface OnClickListener { void onLeftButtonClick(); void onRightButtonClick(); } public void setOnTopBarClickListener(OnClickListener listener) { this.listener = listener; } public TopBar(Context context, AttributeSet attrs) { super(context); LayoutInflater.from(context).inflate(R.layout.layout_top_bar, this); ibtLeft = (ImageButton) findViewById(R.id.ibt_left); ibtRight = (ImageButton) findViewById(R.id.ibt_right); tvTitle = (TextView) findViewById(R.id.tv_title); ibtLeft.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(), "leftButton", Toast.LENGTH_SHORT).show(); //Toast可以显示 // listener.onLeftButtonClick(); //TODO NullPointerException 为什么没有实例化listener? } }); ibtRight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onRightButtonClick(); //TODO NullPointerException } }); } } ``` #logcat输出 ``` 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: FATAL EXCEPTION: main 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: java.lang.NullPointerException 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at com.vder.puzzlegame.ui.TopBar$2.onClick(TopBar.java:55) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at android.view.View.performClick(View.java:4204) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:17355) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:725) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:92) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at android.os.Looper.loop(Looper.java:137) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5041) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:511) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 10-14 13:42:14.442 1366-1366/com.vder.puzzlegame E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method) ```
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
这30个CSS选择器,你必须熟记(上)
关注前端达人,与你共同进步CSS的魅力就是让我们前端工程师像设计师一样进行网页的设计,我们能轻而易举的改变颜色、布局、制作出漂亮的影音效果等等,我们只需要改几行代码,不需...
国产开源API网关项目进入Apache孵化器:APISIX
点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!近日,又有一个开源项目加入了这个Java开源界大名鼎鼎的Apache基金会,开始进行孵化器。项目名称:AP...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
编写Spring MVC控制器的14个技巧
本期目录 1.使用@Controller构造型 2.实现控制器接口 3.扩展AbstractController类 4.为处理程序方法指定URL映射 5.为处理程序方法指定HTTP请求方法 6.将请求参数映射到处理程序方法 7.返回模型和视图 8.将对象放入模型 9.处理程序方法中的重定向 10.处理表格提交和表格验证 11.处理文件上传 12.在控制器中自动装配业务类 ...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
求小姐姐抠图竟遭白眼?痛定思痛,我决定用 Python 自力更生!
点击蓝色“Python空间”关注我丫加个“星标”,每天一起快乐的学习大家好,我是 Rocky0429,一个刚恰完午饭,正在用刷网页浪费生命的蒟蒻...一堆堆无聊八卦信息的网页内容慢慢使我的双眼模糊,一个哈欠打出了三斤老泪,就在此时我看到了一张图片:是谁!是谁把我女朋友的照片放出来的!awsl!太好看了叭...等等,那个背景上的一堆鬼画符是什么鬼?!真是看不下去!叔叔婶婶能忍,隔壁老王的三姨妈的四表...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
相关热词 c# 输入ip c# 乱码 报表 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件
立即提问