我正在从usb串口读取微控制器的数据。
根据我收到的数据,我想替换片段。
当我在按钮上尝试下面的代码时,单击该片段将被完美替换。但是当我尝试在一些其他条件下替换片段时,比如匹配的字符串,那么它就不起作用了。
它也没有给出任何错误。它只是重新启动应用程序。
我正在使用两个碎片firstscreen和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 :(得分:1)
嘿对不起伙计我犯了一个愚蠢的错误。我在更换片段后调用了finish()。非常抱歉。
答案 1 :(得分:0)
修改openDevice()方法中的try-catch块以获取错误日志
try {
//your code
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
这将打印错误日志,然后您可以确定确切的问题。然后,当您发布错误日志时,stackoverflow人员很容易回答您的问题。