介绍
我有一个蓝牙的应用程序,包括其上有3个按钮,做了一个活动:
- 上设置的知名度,并创建一个服务器连接
- 查找设备,并创建一个客户端连接
- 送东西
我有以下类别:
- 主要活动:在那里我有所有的方法,和按钮听众
- 3个不同的类与主题:ClientConnection,一个ServerConnection和ConnectedThread
现在,我必须改变德兴一点点,而不是有这一切一项活动,使用标签上的动作条,我需要创建2个片段:服务器和客户端。
所以,基本上,我需要定义服务器和服务器片段发送按钮,并在客户端片段客户按钮,并设置他们的听众。
题
从每个片段,利用一个按钮时,我应该调用在主活动ubicated其相应的方法。 我想这样来做,而不是复制所有在每个片段的方法和接口,只需要有它simplier。
我尝试设置方法为静态的,但也有不能用静态引用来调用的方法里面的一些定义。 例:
public class ServerFragment extends Fragment {
//...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.server_layout, container, false);
btnServer = (Button) view.findViewById(R.id.buttonServer);
btnServer.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
onClickServer();
}
});
//...
_
public class BluetoothActivity extends Activity {
//...
public void onClickServer() {
Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 120);
startActivityForResult(discoverableIntent, REQUEST_DISCOVERABLE);
}
如果我设置onClickServer()
作为静态的,我必须设置REQUEST_DISCOVERABLE
过于静态,而startActivityForResult()
不会让我用一个静态变量存在。
我怎么能这样做?
UPDATE -投掷的NullPointerException
我创建了一个叫做ClickInterface作为建议新的类,在那里我已经定义了2个接口,一个用于服务器,另一个用于客户端。
不,从片段,我想打电话给在onclick方法的方法,但只是在我做调用回调的方法将线抛出NPE:
public class ServerFragment extends Fragment implements OnClickListener {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.server_layout, container, false);
btnServer = (Button) view.findViewById(R.id.buttonServer);
btnServer.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.buttonServer:
serverFragCallback.onServer(); //HERE I RECEIVE THE NPE
break;
}
}
这是logcat的输出:
03-20 16:33:57.581: E/AndroidRuntime(24884): FATAL EXCEPTION: main
03-20 16:33:57.581: E/AndroidRuntime(24884): Process: com.uax.bluetoothconnection, PID: 24884
03-20 16:33:57.581: E/AndroidRuntime(24884): java.lang.NullPointerException
03-20 16:33:57.581: E/AndroidRuntime(24884): at com.uax.bluetoothconnection.ServerFragment.onClick(ServerFragment.java:43)
03-20 16:33:57.581: E/AndroidRuntime(24884): at android.view.View.performClick(View.java:4633)
03-20 16:33:57.581: E/AndroidRuntime(24884): at android.view.View$PerformClick.run(View.java:19330)
03-20 16:33:57.581: E/AndroidRuntime(24884): at android.os.Handler.handleCallback(Handler.java:733)
03-20 16:33:57.581: E/AndroidRuntime(24884): at android.os.Handler.dispatchMessage(Handler.java:95)
03-20 16:33:57.581: E/AndroidRuntime(24884): at android.os.Looper.loop(Looper.java:157)
03-20 16:33:57.581: E/AndroidRuntime(24884): at android.app.ActivityThread.main(ActivityThread.java:5356)
03-20 16:33:57.581: E/AndroidRuntime(24884): at java.lang.reflect.Method.invokeNative(Native Method)
03-20 16:33:57.581: E/AndroidRuntime(24884): at java.lang.reflect.Method.invoke(Method.java:515)
03-20 16:33:57.581: E/AndroidRuntime(24884): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
03-20 16:33:57.581: E/AndroidRuntime(24884): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
03-20 16:33:57.581: E/AndroidRuntime(24884): at dalvik.system.NativeStart.main(Native Method