小编ros*_*man的帖子

配置后从backstack更改片段现在共享FrameLayout?

应用问题:

当方向更改时,应用程序遇到以下问题:

  • FragmentA和FragmentC现在都占用了FrameLayout容器.

什么有效:在旋转屏幕之前,一切都按照我想要的方式工作.

活动描述简要说明:

EditActivity目的:编辑集合和项目字段.

以编程方式创建此活动的片段:

  • FragmentA - 用于编辑集合字段的片段
  • FragmentB - 集合中项目的ListFragment
  • FragmentC - 用于编辑项目字段的片段.

初始布局: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

8
推荐指数
1
解决办法
7028
查看次数

DataInputStream vs InputStreamReader,试图在概念上理解这两者

正如我暂时理解它:

DataInputStream是一个InputStream子类,因此它读取和写入字节.如果您正在读取字节,并且您知道它们将是ints或其他一些原始数据类型,那么您可以byte使用它直接读取它们DataInputStream.

  • 问题:在读取内容之前,您是否需要知道正在读取的内容的类型(int,string等)?并且整个文件是否需要由一个原始类型组成?

我遇到的问题是:为什么不使用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)它,因为它看起来不像直接从字节转换为基元的任何能力正在被利用?

  • 我错过了什么吗?

感谢您的见解.

java inputstreamreader datainputstream

6
推荐指数
1
解决办法
6669
查看次数

动态更改自定义图形的颜色

问题:在运行方法之前,图形不会重新绘制.

单击按钮时会调用两个方法.每个方法内部都是代码,用于更改与此方法关联的图形的颜色(在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)

java graphics swing jpanel repaint

4
推荐指数
1
解决办法
1314
查看次数

自定义CursorAdapater的bindView调用了77次......我做错了什么?

我读了这个问题,它说不要担心,但我想我需要一些保证.

我的自定义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)

android android-cursoradapter

3
推荐指数
1
解决办法
1796
查看次数

理解为什么/如何在连续的排序上优化Java的int数组的本地排序...所以我可以阻止它

我的程序简而言之:

我有一个程序,连续运行几个排序算法对一组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 sorting optimization null object-reference

3
推荐指数
1
解决办法
789
查看次数