2013-12-24 4 views
2

Я читаю данные с микроконтроллера из последовательного порта USB.Замена фрагментов динамически не на нажатие кнопки или изменение ориентации

Основываясь на данных, которые я получаю, я хочу заменить фрагменты.

Когда я пытаюсь выполнить мой код ниже, нажмите кнопку, чтобы фрагмент был заменен отлично. Но когда я пытаюсь заменить фрагмент в некоторых других условиях, например, строки соответствуют, то он не работает.

Это также не дает никаких ошибок. Он просто перезапускает приложение.

Я использую два перца и первый RinseFragment.

Добавлен фрагмент первого экрана активности. в строке соответствия RinseFragment должен заменить фрагмент первого экрана.

См. Мой код ниже.

public class ProcessActivity extends FragmentActivity { 

public Physicaloid phy; 
TextView status; 
Handler mHandler = new Handler(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_process); 



    phy = new Physicaloid(this); 

    openDevice(); 


    IntentFilter filter = new IntentFilter(); 
    filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED); 
    filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED); 
    registerReceiver(mUsbReceiver, filter); 

    status = (TextView)findViewById(R.id.status); 

    FirstScreen fs = new FirstScreen(); 
    getFragmentManager().beginTransaction().add(R.id.fragment_container, fs).commit(); 

} 

private void openDevice() { 
     if (!phy.isOpened()) { 
      if (phy.open()) { // default 9600bps 
        phy.addReadListener(new ReadLisener() { 
        String readStr; 
        @Override 
        public void onRead(int size) { 
         byte[] buf = new byte[size]; 

         phy.read(buf, size); 
         try { 
          readStr = new String(buf, "UTF-8"); 
          modeselector(readStr); 
          finish(); 
         } catch (UnsupportedEncodingException e) { 

         } 

        } 
       }); 
      } 
     } 
    } 

public void modeselector(String s){ 

    if(s.equals("R_A")){ 

     RinseFragment rFragment = new RinseFragment(); 
         FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
         transaction.replace(R.id.fragment_container, rFragment); 
         transaction.addToBackStack(null); 
         transaction.commit(); 
    } 
    if(s.equals("R_S")){ 

     tvAppend(status,"RINSING . . ."); 

    } 

    else 
    { 

    } 

} 

BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 

      if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) { 
       closeDevice(); 
      } 
     } 
    }; 

    private void closeDevice() { 
     if(phy.close()) { 
      phy.clearReadListener();   
     } 
    } 

Сейчас моя основная деятельность XML-файл

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 

tools:context=".ProcessActivity" > 

<LinearLayout 
    android:id="@+id/linearLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="80dp" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" 
    android:background="#10000000" > 

    <Button 
     android:id="@+id/rinse" 
     android:layout_width="175dp" 
     android:layout_height="60dp" 
     android:text="RINSE" 
     android:textSize="20sp" 
     android:layout_marginTop="10dp" 
     android:layout_marginLeft="10dp" 
     android:shadowColor="#000000" 
     android:shadowDx="0" 
     android:shadowDy="0" 
     android:shadowRadius="0" 
     android:background="#53CF29" 
     android:onClick="onrinse"/> 

    <Button 
     android:id="@+id/dprep" 
     android:layout_width="175dp" 
     android:layout_height="60dp" 
     android:textSize="20sp" 
     android:text="PREPARATION" 
     android:layout_marginTop="10dp" 
     android:layout_marginLeft="5dp" 
     android:shadowColor="#000000" 
     android:shadowDx="0" 
     android:shadowDy="0" 
     android:shadowRadius="0" 
     /> 

    <Button 
     android:id="@+id/dialysis" 
     android:layout_width="175dp" 
     android:layout_height="60dp" 
     android:textSize="20sp" 
     android:layout_marginTop="10dp" 
     android:layout_marginLeft="5dp" 
     android:text="DIALYSIS" 
     android:shadowColor="#000000" 
     android:shadowDx="0" 
     android:shadowDy="0" 
     android:shadowRadius="0" 
     /> 

    <Button 
     android:id="@+id/disinfect" 
     android:layout_width="175dp" 
     android:layout_height="60dp" 
     android:textSize="20sp" 
     android:layout_marginTop="10dp" 
     android:layout_marginLeft="5dp" 
     android:text="DISINFECT" 
     android:shadowColor="#000000" 
     android:shadowDx="0" 
     android:shadowDy="0" 
     android:shadowRadius="0" 
     /> 

    <AnalogClock 
     android:id="@+id/analogClock1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="200dp"/> 

</LinearLayout> 

<FrameLayout 
    android:id="@+id/fragment_container" 
    android:layout_below="@id/linearLayout1" 
    android:layout_above="@+id/statusbar" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:background="#ffffff" 
    > 

</FrameLayout> 

<LinearLayout 
    android:id="@+id/statusbar" 
    android:layout_width="fill_parent" 
    android:layout_height="60dp" 
    android:layout_alignLeft="@+id/linearLayout1" 
    android:layout_alignParentBottom="true" 
    android:layout_alignRight="@+id/linearLayout1" 
    android:background="#30000000" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="16dp" 
     android:layout_marginLeft="10dp" 
     android:text="STATUS : " 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TextView 
     android:id="@+id/status" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="CALIBRATION FINISHED" 
     android:layout_marginTop="16dp" 
     android:layout_marginLeft="20dp" 
     android:textSize="20sp" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

</LinearLayout> 

Теперь мой фрагмент файлов оба же, без содержимого, пустой XML-файлов.

FirstScreen.java

public class FirstScreen extends Fragment { 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    return inflater.inflate(R.layout.firstscreen, container,false); 
} 

}

ответ

0

изменить блок примерочных поймать внутри метода openDevice(), чтобы получить журнал регистрации ошибок

try { 
     //your code 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    }catch (Exception e) { 
     e.printStackTrace(); 
    } 

это будет печатать журнал ошибок и то вы можете определить точную проблему. а затем пользователям stackoverflow легко ответить на ваш вопрос при публикации журнала ошибок.

+0

Чтение с устройства не является проблемой, оно считывает правильные данные. Это я уверен. Я проверил его, открыв новую активность, а не заменяя фрагмент. Это сработало. Также моя проблема в том, что я не могу отлаживать и запускать одновременно. Я подключаю свой планшет к микроконтроллеру через otg к USB-кабелю. –

+0

Я также видел, что он заменяет фрагмент, а затем закрывается без ошибок. Мой фрагмент xml - пустой, содержащий только один относительный макет. –

1

Эй, извините, я сделал глупую ошибку. После замены фрагмента я вызывал финиш(). Так жаль.

Смежные вопросы