- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用包含一个 Activity ,该 Activity 由两个 fragment 组成。第一个 fragment 是通过 XML 添加的,第二个 fragment 是根据第一个 fragment 的输入动态添加的。该应用程序在模拟器上完美运行。但是,当在真实设备(三星 galaxy 选项卡)上进行测试时,应用程序会在更改设备方向时简单地退出(不会崩溃,也不会出现任何错误)。我正在使用安卓 4.0.我搜索了很多这个问题并尝试了本网站和其他网站提供的各种解决方案,但问题仍然存在。我还想补充一点,我的应用程序不使用 fragment 的版本在两个方向上都可以正常工作。
主布局文件(activity_main.xml)
<LinearLayout 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=".MainActivity"
android:orientation="vertical" >
<fragment
android:name="androiapps.autoqos.FirstFragment"
android:id="@+id/fragment"
android:layout_weight="2"
android:layout_width="fill_parent"
android:layout_height="0dp"
/>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_weight="1"
android:layout_height="0dp"
android:orientation="vertical"
android:id="@+id/frameLayout" >
</FrameLayout>
</LinearLayout>
MainActivity.java
public class MainActivity extends FragmentActivity implements OnInputReceivedListener, MessageSendListener{
//variable declarations
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public void onConfirm(Bundle bundle) {
// TODO Auto-generated method stub
if(bundle!=null){
//int PT = bundle.getInt("PT");
System.out.println("Got:"+bundle.getString("ip")+bundle.getString("port")+bundle.getString("tcpip")
+bundle.getString("tcpport")+bundle.getInt("PT",0));
udpHost=bundle.getString("ip");
udpPort=bundle.getString("port");
tcpHost=bundle.getString("tcpip");
tcpPort=bundle.getString("tcpport");
pType=bundle.getInt("pType",0);
FragmentManager fragmentManager = getSupportFragmentManager();
MessageFragment fragment = new MessageFragment();
fragment.setArguments(bundle);
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.frameLayout, fragment);
transaction.commit();
}
}
@Override
public void send(Bundle bundle) {
// TODO Auto-generated method stub
if(bundle==null)
return;
msg = bundle.getString("msg");
delay = bundle.getInt("delay",0);
System.out.println("Got: "+msg+delay);
startTransmission();
}
void startTransmission(){
System.out.println("\nTrying to send data");
sendFilter = new IntentFilter(UdpResponseReceiver.ACTION_RESP1);
sendFilter.addCategory(Intent.CATEGORY_DEFAULT);
receiver1 = new UdpResponseReceiver();
receiveFilter = new IntentFilter(UdpHandlerReceiver.ACTION_RESP2);
receiveFilter.addCategory(Intent.CATEGORY_DEFAULT);
receiver2 = new UdpHandlerReceiver();
registerReceiver(receiver1, sendFilter);
registerReceiver(receiver2, receiveFilter);
udpServiceIntent = new Intent(MainActivity.this,UdpSendService.class);
udpReceiveIntent = new Intent(MainActivity.this,UdpReceiveService.class);
udpServiceIntent.putExtra("host",udpHost);
udpServiceIntent.putExtra("port", udpPort);
udpServiceIntent.putExtra("msg",msg);
udpServiceIntent.putExtra("delay",delay);
udpServiceIntent.putExtra("pType",pType);
startService(udpServiceIntent);
udpReceiveIntent.putExtra("tcpHost", tcpHost);
udpReceiveIntent.putExtra("tcpPort", tcpPort);
startService(udpReceiveIntent);
}
public class UdpResponseReceiver extends BroadcastReceiver {
public static final String ACTION_RESP1 = "com.example.udpmessageclient.intent.action.MESSAGE_PROCESSED";
@Override
public void onReceive(Context context, Intent intent) {
// Update UI, new "message" processed by SimpleIntentService
System.out.println(intent.getStringExtra(UdpSendService.PARAM_OUT_MSG));
}
}
public class UdpHandlerReceiver extends BroadcastReceiver {
public static final String ACTION_RESP2 = "com.example.udpmessageclient.intent.action.MESSAGE_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
// Update UI, new "message" processed by SimpleIntentService
System.out.println("Received message from server: "+intent.getStringExtra(UdpReceiveService.OUT_MSG));
}
}
@Override
public void stop() {
// TODO Auto-generated method stub
endTransmission();
Button btn = (Button)findViewById(R.id.btn_confirm);
btn.setEnabled(true);
}
void endTransmission(){
UdpSendService.send=false;
if(receiver1!=null && receiver2!=null){
unregisterReceiver(receiver1);
unregisterReceiver(receiver2);
receiver1=null;
receiver2=null;
}
//while(stopService(udpReceiveIntent)!=true);
if(udpReceiveIntent!=null)
stopService(udpReceiveIntent);
System.out.println("\nreceive service stopped");
//while(stopService(udpServiceIntent)!=true);
if(udpServiceIntent!=null)
stopService(udpServiceIntent);
System.out.println("\nsend service stopped");
return;
}
@Override
public void onBackPressed() {
if(UdpSendService.send)
stop();
finish();
}
@Override
public void onStop() {
super.onStop();
stop();
finish();
}
}
FirstFragment.java
public class FirstFragment extends Fragment{
//variable declarations
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View contentView = inflater.inflate(R.layout.activity_message_form, null);
contentView.setDrawingCacheEnabled(false);
text1 = (EditText) contentView.findViewById(R.id.ip);
text2 = (EditText) contentView.findViewById(R.id.port);
text3 = (EditText) contentView.findViewById(R.id.tcpip);
text4 = (EditText) contentView.findViewById(R.id.tcpport);
if(onSaveInstance!=null){
text1.setText(onSaveInstance.getString("ip"));
text2.setText(onSaveInstance.getString("port"));
text3.setText(onSaveInstance.getString("tcpip"));
text4.setText(onSaveInstance.getString("tcpport"));
}
button= (Button) contentView.findViewById(R.id.btn_confirm);
rb1 = (RadioButton) contentView.findViewById(R.id.rbtn_1);
rb2 = (RadioButton) contentView.findViewById(R.id.rbtn_2);
rb3 = (RadioButton) contentView.findViewById(R.id.rbtn_3);
rb4 = (RadioButton) contentView.findViewById(R.id.rbtn_4);
confirmButtonListener = new OnClickListener(){
public void onClick(View view){
button.setEnabled(false);
if (rb1.isChecked())
PT = 0;
else if (rb2.isChecked())
PT = 1;
else if (rb3.isChecked())
PT = 2;
else if (rb4.isChecked())
PT = 3;
else
PT = 0;
ip = text1.getText().toString().trim();
port = text2.getText().toString().trim();
tcpip=text3.getText().toString().trim();
tcpport=text4.getText().toString().trim();
if(ip=="" || port=="" || tcpip == "" || tcpport ==""){
Toast.makeText(getActivity(), "Please fill in all the fields", Toast.LENGTH_SHORT).show();
}
else{
Bundle b = new Bundle();
b.putString("ip",ip);
b.putString("port", port);
b.putString("tcpip",tcpip);
b.putString("tcpport", tcpport);
b.putInt("pType", PT);
if ( listener != null ){
System.out.println("Bundle:"+ip+port+tcpip+tcpport+PT);
listener.onConfirm(b);
}
}
}
};
return contentView;
}
@Override
public void onStart(){
super.onStart();
button.setOnClickListener(confirmButtonListener);
}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
try {
listener = (OnInputReceivedListener)activity;
}catch (ClassCastException e) {
Toast.makeText( activity, "Activity must implement this interface.", Toast.LENGTH_SHORT).show();
}
}
public interface OnInputReceivedListener{
public void onConfirm(Bundle bundle);
}
@Override
public void onPause(){
super.onPause();
onSaveInstance = new Bundle();
onSaveInstance.putString("udpHost", ip);
onSaveInstance.putString("udpPort", port);
onSaveInstance.putString("tcpHost", tcpip);
onSaveInstance.putString("tcpPort", tcpport);
}
@Override
public void onResume(){
super.onResume();
if(onSaveInstance!=null){
text1.setText(onSaveInstance.getString("ip"));
text2.setText(onSaveInstance.getString("port"));
text3.setText(onSaveInstance.getString("tcpip"));
text4.setText(onSaveInstance.getString("tcpport"));
}
}
}
MessageFragment.java
public class MessageFragment extends Fragment{
//variable declarations
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View contentView = inflater.inflate(R.layout.activity_message, null);
contentView.setDrawingCacheEnabled(false);
msgText = (EditText) contentView.findViewById(R.id.msg);
sendBtn = (Button) contentView.findViewById(R.id.btn_send);
stopBtn = (Button) contentView.findViewById(R.id.btn_stop);
if(onSaveInstance!=null){
msgText.setText(onSaveInstance.getString("msg"));
delayField.setText(onSaveInstance.getInt("delay", 0));
}
b = getArguments();
System.out.println("PT="+b.getInt("pType",0));
if(b!=null){
int pType = b.getInt("pType");
if(pType==1 || pType== 3){
delayField = (EditText) contentView.findViewById(R.id.delay);
tvDelay = (TextView) contentView.findViewById(R.id.tvDelay);
tvDelay.setVisibility(View.VISIBLE);
delayField.setVisibility(View.VISIBLE);
}
}
sendButtonListener=new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
sendBtn.setEnabled(false);
Bundle b = new Bundle();
msg=msgText.getText().toString();
delay=Integer.parseInt(delayField.getText().toString());
b.putString("msg", msg);
if(delayField!=null)
b.putInt("delay",delay);
if(mListener!=null)
mListener.send(b);
}
};
stopButtonListener = new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
sendBtn.setEnabled(true);
mListener.stop();
}
};
return contentView;
}
@Override
public void onStart(){
super.onStart();
sendBtn.setOnClickListener(sendButtonListener);
stopBtn.setOnClickListener(stopButtonListener);
}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
try {
mListener = (MessageSendListener)activity;
}catch (ClassCastException e) {
Toast.makeText( activity, "Activity must implement this interface.", Toast.LENGTH_SHORT).show();
}
}
public interface MessageSendListener{
public void send(Bundle bundle);
public void stop();
}
@Override
public void onPause(){
super.onPause();
onSaveInstance = new Bundle();
onSaveInstance.putString("msg", msg);
onSaveInstance.putInt("delay", delay);
}
@Override
public void onResume(){
super.onResume();
if(onSaveInstance!=null){
msgText.setText(onSaveInstance.getString("msg"));
delayField.setText(onSaveInstance.getInt("delay", 0));
}
}
}
最佳答案
public void onStop() {
super.onStop();
stop();
finish();
为什么要完成()?您的应用程序完全按照您编写的代码执行。当方向改变时,调用 onStop()。然后你finish()
你的 Activity 。
关于当设备的方向改变时,带有 fragment 的 android Activity 退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14625532/
我有以下MWE function f(p) ans = zeros(p, 2) return ans end ans = f(2) ans b=ans.+1.0 ans 起初,ans是正确的,
OWIN AppBuilder“UseStatic”位从本地文件系统传送文件,这在某些情况下很方便,但我希望它从我在应用程序启动时预先填充的内存中 IDictionary 传送内容。任何人都可以指出一
我是 JavaScript 新手。 我的代码允许我列出 JSON 文档的元素及其类型,并将所有元素连接到一个字符串 donnees_types 中。 问题是 JavaScript 中的 typeof
我想在每次刷新时更改主页上的背景图像。我怎样才能做到这一点?我认为 jquery 是可能的,但我不太清楚。 感谢您对此主题的任何帮助或评论。 最佳答案 我不知道“如何”,但我找到了以下链接: http
所以我已经在这上面花了几个小时了,老实说我完全陷入困境。我写了一个 for 循环来计算整数中的数字数量,但我发现一旦我输入 10 位以上的数字,除数值就会发生变化,而且我不明白为什么。我在互联网上搜索
当我在使用表面 View 的游戏 Activity 和使用膨胀菜单的其他 Activity 之间切换时,我会收到错误消息。 日志猫: 07-13 15:15:34.464: ERROR/Android
听说很简单 R*=f; G*=f; B*=f; 其中 f 是标量值 0 .. 1.0 或更大改变亮度的方法不太正确颜色,但我找不到一些代码片段获得更好的东西(无需太多学习色彩理论)也许有人可以在这里给
如以下链接所述:- How to get the ThreadPoolExecutor to increase threads to max before queueing? 我将队列实现更改为在进入
我只显示最初提供 20 分钟 slotMinutes 的日历。我试图让用户即时更改为 10 分钟的 slotMinutes。 我有一个触发以下代码的按钮: $('#calendar').fullCal
我的问题是:我的应用程序中有一个新闻列表(UITableView)当我点击 1 个"new"时,我打开它,里面有一个后退按钮,可以让我回到列表。现在的问题是我必须在滑动时实现"new"更改,所以我制作
我面临着与 I'm trying to install psycopg2 onto Mac OS 10.6.3; it claims it can't find "stdarg.h" but I ca
需要通过为 array2 中不存在的索引设置 visible false 来从 array1 创建一个新的 array3。 在下面的示例中,我有索引 0,2。所以对于 1,3,结果数组必须具有 vis
我有一个对象,类似这样 var Egg = function(){ this.test = $(.slider .label); $('.slider').slider({
我想改变 ScrollView 的宽度。首先,我这样做了: var scrollWidthConstraint: NSLayoutConstraint! 然后设置它: scrollWidthConst
我有两个动画,一个是“过渡”,它在悬停时缩小图像,另一个是 animation2,其中图像的不透明度以周期性间隔重复变化。 我有 animation2 在图像上进行,当我将鼠标悬停在它上面时,anim
我是一个 jQuery 新手,一直在尝试添加一个脚本来更改 div onClick 的 id。 这是一个jsfiddle example . $(function accept() { $("
我正在尝试更改用户输入的字母的大小写,并将该字母的小写和大写版本存储在变量中。我已经编写了下面的代码,但它在运行时遇到了问题。有人指出是什么导致了问题吗? #include #include #i
假设我有这段代码: char num[2] = {15, 240}; char* p_num; 现在,如果我理解的一切正确,数组中的位应该像这样对齐: 00001111 11110000 我的问题是
var html = '' + count + '' + i.Description + '' + i.Priority + '' + i.Status + 'johnsmith- ' + creat
我在虚拟机上安装了 minix3,并希望我可以操纵当前的队列选择算法,以便我可以将其从优先级顺序更改为包括随机分类的低优先级作业的优先级顺序。我发现我需要更改的代码部分在 proc.c 中,具体部分是
我是一名优秀的程序员,十分优秀!