片段按钮通过蓝牙发送数据; (致力于活动)

时间:2017-06-18 14:52:42

标签: android android-fragments bluetooth

程序在点击的每个按钮上通过蓝牙发送数据。它适用于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内部工作?

1 个答案:

答案 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()