当方向更改时,应用程序遇到以下问题:
什么有效:在旋转屏幕之前,一切都按照我想要的方式工作.
EditActivity目的:编辑集合和项目字段.
以编程方式创建此活动的片段:
初始布局:FragmentA位于FragmentB的顶部,每个都位于自己的FrameLayouts中.
当用户单击FragmentB的listview项时:将FragmentA替换为FragmentC以允许用户编辑该项的字段.现在FragmentC位于FragmentB之上.
这似乎是一个非常简单的概念:活动的顶部用于编辑整个集合的属性或集合中的单个项目.我觉得我没有对布局做过任何奇妙的事情,所以我有点困惑的是,电话(模拟器)的简单旋转会导致这些问题,我正在尝试修复这样一个卑鄙的时间.
为什么Android Fragment Guide示例对我不起作用:他们的示例与我正在做的非常相似,但是他们的详细信息片段要么在新活动中打开,要么在当前活动中的自己的Frame中打开,他们不做任何事情交换片段所以我无法收集他们如何使用onSaveIstanceState来保存可见的片段,然后在onCreate中使用该信息来重新创建在方向更改之前存在的UI.
编辑:通过放弃并将listfragment放入XML中解决了一个问题,这解决了永久旋转"加载..."问题.
android android-configchanges android-fragments back-stack android-framelayout
正如我暂时理解它:
DataInputStream是一个InputStream子类,因此它读取和写入字节.如果您正在读取字节,并且您知道它们将是ints或其他一些原始数据类型,那么您可以byte使用它直接读取它们DataInputStream.
我遇到的问题是:为什么不使用InputStreamReader缠绕InputStream的字节数据?使用这种方法,您仍然在读取字节,然后将它们转换为表示字符的整数.哪个整数表示哪些字符取决于指定的字符集,例如"UTF-8".
InputStreamReader工作无效DataInputStream?我的猜测答案:如果速度真的很重要,你可以做到,那么将InputStream字节数据直接转换为原始数据DataInputStream将是要走的路?这避免了Reader必须将字节数据"转换"为int第一个; 并且它不依赖于提供一个字符集来解释返回的整数表示哪个字符.我想这就是人们的意思,DataInputStream允许机器独立读取底层数据.
DataInputStream可以将字节直接转换为基元.引发整个事情的问题:我正在阅读以下教程代码:
FileInputStream fis = openFileInput("myFileText");
BufferedReader reader = new BufferedReader( new InputStreamReader( new DataInputStream(fis)));
EditText editText = (EditText)findViewById(R.id.edit_text);
String line;
while( (line = reader.readline()) != null){
editText.append(line);
editText.append("\n");
}
Run Code Online (Sandbox Code Playgroud)
...我不明白教师为什么选择使用new DataInputStream(fis)它,因为它看起来不像直接从字节转换为基元的任何能力正在被利用?
感谢您的见解.
问题:在运行方法之前,图形不会重新绘制.
单击按钮时会调用两个方法.每个方法内部都是代码,用于更改与此方法关联的图形的颜色(在UI中); 当方法开始时,图形从黑色变为绿色; 当方法完成时,颜色从绿色变为红色.然后调用下一个方法,其图形应变为绿色(方法正在运行),当方法完成时,其图形应填充红色(方法完成).
我创建了一个简单的状态圆图形(带有填充颜色的30像素圆圈),有3种颜色状态:黑色表示准备好; 绿色的跑步; 红色完成.
我认为这个问题与repaint()单独的线程有关并且计划在能够运行时运行?我尝试将更新图形的代码放在自己的thread-runnable中,然后使用线程.join()确保代码已经完成运行但是没有用.
编辑:删除我用于演示的代码,并根据注释替换单个可运行的代码示例.如果运行代码,您将看到的是在单击每个方法启动和停止时图形不更新的按钮后,它会等待两个方法都运行然后重新绘制图形.
package graphicsUpdateDemo;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
import java.beans.Transient;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
/**
* Application entry
*/
public class App{
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MainFrame();
}
}); …Run Code Online (Sandbox Code Playgroud) 我读了这个问题,它说不要担心,但我想我需要一些保证.
我的自定义CursorAdapter的bindView:
@Override
public void bindView(View view, Context context, Cursor c) {
// get handles for views in xml
ImageView imageView = (ImageView)view.findViewById(R.id.add_lvrow_image);
TextView titleView = (TextView)view.findViewById(R.id.add_lvrow_title);
// get data from cursor and "massage" if necessary
String imageUri = c.getString(c.getColumnIndex(CollectionsTable.COL_IMAGEURI));
String title = c.getString(c.getColumnIndex(CollectionsTable.COL_TITLE));
// terrible time getting run-time sizes of imageView, hardcode for now
int XML_WIDTH = 100;
int XML_HEIGHT = 100;
Log.d(TAG, SCOPE + "bindView called: " +count);
count++;
// use static util class
ImageUtils.loadBitmap(context, imageUri, …Run Code Online (Sandbox Code Playgroud) 我的程序简而言之:
我有一个程序,连续运行几个排序算法对一组int,每个计时.GUI允许用户选择数组大小和各种随机数范围,用于填充要排序的数组.每次单击"排序"按钮都会获取用户的数组值,构造一个新数组,然后使用创建每个排序算法的数组克隆.clone().
问题:
当点击"排序"按钮时,排序第二次改进自己.
在某处我发现了一些我不理解的优化.
这是一个问题的原因:如果用户没有更改他们的数组设置并再次运行排序方法,新的数组构造新的随机数,但随机数范围保持相同,所以运行时间,超过125k的列表,应保持大致相同....不提高300%.
所以这是我面临的演示程序.它只使用一种,Java的本机类来证明这个问题.它还使用硬编码值来构造要排序的随机int数组 - 但每次"输入"按下都会这样做.我认为这个模拟准确地反映了我的程序,因为同样的"错误"也在这里发生.
...每次运行都会使用新值重建数组,那么它如何变得更快?
package sortTooFast;
import java.util.Arrays;
import java.util.Scanner;
public class SortTooFast {
public static final int ARRAY_SIZE = 500000;
public static final int MIN_RANGE = 0;
public static final int MAX_RANGE = 100;
public static final int INCLUSIVE = 1;
int[] sortingArray;
public static void main(String[] args) {
SortTooFast test = new SortTooFast();
test.run();
}
// Run program.
public void run(){
while(true){
// Assign int[] filled with random numbers. …Run Code Online (Sandbox Code Playgroud) java ×3
android ×2
back-stack ×1
graphics ×1
jpanel ×1
null ×1
optimization ×1
repaint ×1
sorting ×1
swing ×1