2016-07-25 66 views
0

我試圖改變一個TextView給一個片段內的藍牙連接的狀態,但似乎沒有什麼時候調用msgReceived.setText(string)時發生。我會如何去做這件事?下面是分片我的Java文件:無法更改從同一活動的片段內TextView的文本

package dleedesign.dubcommunicationstestapp; 

import android.app.Fragment; 
import android.bluetooth.BluetoothAdapter; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.support.annotation.Nullable; 
import android.view.LayoutInflater; 
import android.util.Log; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.TextView; 

public class SecondFragment extends Fragment implements View.OnClickListener { 

View myView; 

public final String TAG = "Main"; 
private Bluetooth bt; 
public Button sendCommand; 
public TextView msgReceived; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    myView = inflater.inflate(R.layout.second_layout, container, false); 

    sendCommand = (Button) inflater.inflate(R.layout.second_layout, container, false).findViewById(R.id.sendCommand); 
    msgReceived = (TextView) inflater.inflate(R.layout.second_layout, container, false).findViewById(R.id.msgReceived); 
    msgReceived.setText("Ready to connect"); 

    bt = new Bluetooth(new MainActivity(), mHandler); 
    connectService(); 

    return myView; 
} 

@Override 
public void onClick(View v) 
{ 
    connectService(); 
} 

public void connectService() 
{ 
    try { 
     msgReceived.setText("Connecting..."); 
     BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter(); 
     if(btAdapter.isEnabled()) 
     { 
      bt.start(); 
      bt.connectDevice("HC-06"); 
      Log.d(TAG, "Btservice started- listening"); 
      msgReceived.setText("Connected!"); 
     } 
     else 
     { 
      Log.w(TAG, "Btservice started - bluetooth is not enabled"); 
      msgReceived.setText("Bluetooth not enabled"); 
     } 
    } catch (Exception e) { 
     Log.e(TAG, "Unable to start bluetooth", e); 
     msgReceived.setText("Unable to connect: " + e); 
    } 
} 

private final Handler mHandler = new Handler() 
{ 
    @Override 
    public void handleMessage(Message msg) 
    { 
     switch (msg.what) 
     { 
      case Bluetooth.MESSAGE_STATE_CHANGE: 
       Log.d(TAG, "MESSAGE_STATE_CHANGE: " + msg.arg1); 
       break; 
      case Bluetooth.MESSAGE_WRITE: 
       Log.d(TAG, "MESSAGE_WRITE"); 
       break; 
      case Bluetooth.MESSAGE_READ: 
       Log.d(TAG, "MESSAGE_READ"); 
       break; 
      case Bluetooth.MESSAGE_DEVICE_NAME: 
       Log.d(TAG, "MESSAGE_DEVICE_NAME " + msg); 
       break; 
      case Bluetooth.MESSAGE_TOAST: 
       Log.d(TAG, "MESSAGE_TOAST " + msg); 
       break; 
     } 
    } 
}; 

} 

編輯: 這裏是吐出來的是logcat的消息時,我選擇SecondFragment:

dleedesign.dubcommunicationstestapp D/BluetoothService: Bounded device 40:EF:4C:C2:A9:32 
dleedesign.dubcommunicationstestapp D/BluetoothService: Bounded device 98:D3:31:70:80:C5 
dleedesign.dubcommunicationstestapp D/BluetoothService: start 
dleedesign.dubcommunicationstestapp D/BluetoothService: setState() 0 -> 1 
dleedesign.dubcommunicationstestapp W/BluetoothAdapter: getBluetoothService() called with no BluetoothManagerCallback 
dleedesign.dubcommunicationstestapp D/BluetoothService: Socket Type: nullBEGIN mAcceptThreadThread[Thread-20627,5,main] 
dleedesign.dubcommunicationstestapp D/BluetoothService: connect to: 98:D3:31:70:80:C5 
dleedesign.dubcommunicationstestapp D/BluetoothService: setState() 1 -> 2 
dleedesign.dubcommunicationstestapp D/Main: Btservice started- listening 
dleedesign.dubcommunicationstestapp I/BluetoothService: BEGIN mConnectThread SocketType:null 
dleedesign.dubcommunicationstestapp W/BluetoothAdapter: getBluetoothService() called with no BluetoothManagerCallback 
dleedesign.dubcommunicationstestapp D/Main: MESSAGE_STATE_CHANGE: 1 
dleedesign.dubcommunicationstestapp D/Main: MESSAGE_STATE_CHANGE: 2 
dleedesign.dubcommunicationstestapp E/BluetoothService: Unable to connect socket 
                         java.io.IOException: read failed, socket might closed or timeout, read ret: -1 
                          at android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:517) 
                          at android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:528) 
                          at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:320) 
                          at dleedesign.dubcommunicationstestapp.Bluetooth$ConnectThread.run(Bluetooth.java:408) 
dleedesign.dubcommunicationstestapp D/BluetoothService: start 
dleedesign.dubcommunicationstestapp D/BluetoothService: setState() 2 -> 1 
dleedesign.dubcommunicationstestapp D/Main: MESSAGE_TOAST { when=-15ms what=5 target=dleedesign.dubcommunicationstestapp.SecondFragment$1 } 
dleedesign.dubcommunicationstestapp D/Main: MESSAGE_STATE_CHANGE: 1 
+0

什麼你看到的消息?此外,一個logcat片段將是有用的。恕我直言,你應該使用類似'AsyncTask'的東西來在不同的線程中使用藍牙進行播放,並在UI線程中顯示信息。 –

+0

這樣做會更有效嗎? –

回答

1

發生什麼事是你試圖用給定的佈局誇大視圖,每次你做findViewById,然後將它投射到一個Tex tView。這是調用findViewById在不同的視圖,然後你回來。你應該先膨脹的佈局,你在第一線與

myview = inflater.inflate.... 

,然後做,

msgReceived = (TextView) myView.findViewById(R.id.msgReceived); 

(同任何其他的TextView,按鈕等您正在嘗試使用)

+1

好吧,這是有道理的,因爲按鈕不工作。謝謝你的解釋! –

+0

歡迎您! – wanpanman

0

嘗試

msgReceived = (TextView) myView.findViewById(R.id.msgReceived); 
+0

這工作,非常感謝你! –

+0

歡迎您!請花時間將其作爲答案進行驗證並加以讚揚,以便人們認識到它是好的,歡呼! –

+0

我也推薦使用這種方法與所有的UI元素 –