3.安卓学习,监听事件的两种方法,private的用法

1.监听事件的主要两种方法
   
   
public class MainActivity extends Activity {
private Button button;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
 
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
 
@Override
public void onClick(View v) {
 
// 在此处添加逻辑 }
}); }
}
这样虽然方便,但当监听方法较多时会导致结构混乱,
下面是实现接口方式注册监听器:
public class MainActivity extends Activity implements OnClickListener {
private Button button;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
 
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
 
}
 
@Override
public void onClick(View v) {
 
switch (v.getId()) {
case R.id.button:
// 在此处添加逻辑
 
break;
default:
 
break; }
 
} }
这样即使监听方法较多时结构也较为清晰。
2.举例
   
   
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 
private Button button;
private Button button2;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button) findViewById(R.id.button);
button2=(Button) findViewById(R.id.button_2);
button.setOnClickListener(this);
button2.setOnClickListener(this);
 
 
}
 
 
@Override
public void onClick(View v){
switch (v.getId()){
case R.id.button:
Toast.makeText(MainActivity.this,"you clicked botton1",Toast.LENGTH_SHORT).show();//此处添加逻辑
break;
case R.id.button_2:
Toast.makeText(MainActivity.this,"you clicked botton2",Toast.LENGTH_SHORT).show();
default:
break;
}
 
}
 
}
3.为什么大多数变量的声明都是private
private 是私有的只能在当前类里使用
不加修饰的是默认的package,详情如下:
Java中public、package、protected、private的访问权限如下表所示 
注:package权限就是默认的访问权限,也就是default package 只能被同类或者同一个包中的类访问
prtected 只能被同类,同一包中的类,或者不同包中的子类访问 
同一个类 同一个包 不同包的子类 不同包的非子类 
public 可访问 可访问 可访问 可访问 
protected 可访问 可访问 可访问 
package 可访问 可访问 
private 可访问
private 是私有的。那为什么要有private呢?
回答:
因为java中封装要用到,private只能在类的内部可以用,就是子类也不可以用。哪么就做到了完全封装,一开始你可能不懂,是因为你没学到,java的封装特性。哪么都private了要怎么在外面用呢,有办法就是通过设置get和set2个方法来设置
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android动态注册监听网络变化的方式有两种,分别是BroadcastReceiver和ConnectivityManager.NetworkCallback。其中BroadcastReceiver是较老的方式,而ConnectivityManager.NetworkCallback是从Android 5.0开始引入的新方式,推荐使用后者。 对于异常的情况,可能是由于权限未开启、代码实现有误等原因导致的。建议检查以下几点: 1. 权限是否开启:在AndroidManifest.xml文件中添加网络状态权限 ``` <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> ``` 2. 是否正确注册BroadcastReceiver或NetworkCallback:在Activity或Service的onCreate方法中进行注册 ``` // BroadcastReceiver方式 IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(networkReceiver, filter); // NetworkCallback方式 ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); NetworkRequest.Builder builder = new NetworkRequest.Builder(); NetworkRequest request = builder.build(); connectivityManager.registerNetworkCallback(request, networkCallback); ``` 3. 是否正确实现BroadcastReceiver或NetworkCallback:对于BroadcastReceiver,需要在onReceive方法中处理网络状态变化;对于NetworkCallback,需要实现onAvailable和onLost方法。 ``` // BroadcastReceiver方式 private BroadcastReceiver networkReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { // 网络已连接 } else { // 网络已断开 } } }; // NetworkCallback方式 private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { // 网络已连接 } @Override public void onLost(Network network) { // 网络已断开 } }; ``` 如果以上几点检查都没有问题,可能是由于其他原因导致的异常,可以查看日志或调试代码进行排查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值