程序在点击的每个按钮上通过蓝牙发送数据。它适用于MainActivity,但如果Button在Fragment中,我怎么能得到相同的结果?
我在主要活动中有这个:
btnTimeMinus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (Connection) {
connectedThread.sendData("TurnOnLedMinus");
}
else {
Toast.makeText(getApplicationContext(), "Bluetooh not conneceted", Toast.LENGTH_LONG).show();
}
}
});
其中称之为:
public void sendData(String DataSend) {
byte[] msgBuffer = DataSend.getBytes();
try {
mmOutStream.write(msgBuffer);
}
catch (IOException e) {
Toast.makeText(getApplicationContext(), "Error: " + erro, Toast.LENGTH_LONG).show();
}
}
换句话说,我认为我必须使用正确的字符串调用“SendData”,就像在“connectedThread.sendData(”TurnOnLedMinus“)上一样;”但把它放在片段里面。问题是片段内没有“连接”或“connectThread”。这只能在MainActivity中调用。
编辑:
public class frag_light extends Fragment {
Button btAmanMenos;
ChecaBotaoClicado checaBotaoClicado;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view;
view = inflater.inflate(R.layout.fragment_frag_light, container, false);
btAmanMenos.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checaBotaoClicado.BotaoClicado("AmanhecerMenos");
}
});
checaBotaoClicado.BotaoClicado("AmanhecerMenos");
return view;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
checaBotaoClicado = (ChecaBotaoClicado)activity;
}
catch(Exception erro) {}
}
public interface ChecaBotaoClicado {
public void BotaoClicado(String DadosBotao);
}
}
界面运行正常。如果我把“checaBotaoClicado.BotaoClicado(”AmanhecerMenos“);”在OnAttach内部,它正确发送。但我有很多按钮要添加,所有类型的消息都要通过蓝牙发送。为什么它不能在OnClick内部工作?
答案 0 :(得分:0)
我可以将MainActivity中的变量值“发送”到片段中吗?
我认为你正在寻找另一种方式。
理想情况下,您可以将数据发送回包含所需变量的Activity。
How to implement OnFragmentInteractionListener
Android文档 - Fragment event callbacks
修改强>
为什么它不能在OnClick内部工作?
您的代码有一个NullPointerException,因为您从未为其分配了按钮/ <div infinite-scroll="scrollSearch()" infinite-scroll-container="'#foundingScroll'">
- d。
您实际上不需要分配Button,因为您可以直接将click侦听器分配给找到的视图。
findViewById
或者你可以投射public class LightFragment extends Fragment {
// Button btAmanMenos;
private ChecaBotaoClicado checaBotaoClicado;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_frag_light, container, false);
view.findViewById(R.id.btAmanMenos).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if ( null != checaBotaoClicado) {
checaBotaoClicado.BotaoClicado("AmanhecerMenos");
} else {
Log.e("LightFragment ERR", "checaBotaoClicado not assigned!");
}
}
});
// This doesn't need called here
// checaBotaoClicado.BotaoClicado("AmanhecerMenos");
return view;
}
并从那里调用一些方法。例如,
getActivity()