小编hoo*_*dfx的帖子

IllegalArgumentException:快速切换ActionBar Tabs时,没有为片段的id找到视图

我正在为平板电脑开发Android应用,而不是使用兼容性库.

只有一个Activity,它使用带有3个选项卡的ActionBar.在TabListener中,我使用setContentView加载特定于该选项卡的布局,然后将相关片段添加到其框架中.这几乎与我想要的完全一样,除非你在选项卡之间切换得足够快,应用程序就会崩溃.

我使用三星Galaxy Tab作为我的调试设备,切换标签非常快.以正常速度,我可以在它们之间来回切换,页面立即加载.问题是当我在选项卡之间进行超级切换时.

起初我得到了一个

IllegalStateException: Fragment not added
Run Code Online (Sandbox Code Playgroud)

如下所示:http: //code.google.com/p/android/issues/detail? id = 17029根据onTabUnselected中使用try/catch块的建议,我使应用程序更加强大,但导致手头的问题:

IllegalArgumentException: No view found for id 0x... for fragment ...
Run Code Online (Sandbox Code Playgroud)

我没有在网上找到任何其他有同样问题的案例,所以我担心我可能会做一些不受支持的事情.同样,我想要做的是在一个Activity中使用3种不同的布局 - 当你单击一个选项卡时,监听器将调用setContentView来更改布局,然后添加片段.除非您开始在标签之间积极切换,否则它的工作效果非常好

我从以下方面得到了这个想法:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentTabs.html 而不是TabListener保留对一个片段的引用,我有一系列的.此外,我没有使用附加/分离,因为这些只是在API 13中添加.

我的理论是setContentView还没有完成创建视图,这就是FragmentTransaction无法添加它们的原因,或者当选择另一个选项卡并调用setContentView时,为一个选项卡添加片段,从而破坏另一组视图.

我试图破解一些东西来减慢标签切换速度,但没有到达任何地方.

这是我的TabListener的代码:

private class BTabListener<T extends Fragment> implements ActionBar.TabListener{

    private int mLayout;
    private Fragment[] mFrags;
    private TabData mTabData;
    private Activity mAct;
    private boolean mNoNewFrags;


    public BTabListener(Activity act, int layout, TabData td, boolean frags){
        mLayout = layout;
        mTabData = …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-3.0-honeycomb

9
推荐指数
1
解决办法
1万
查看次数

从XML加载片段时动画片段转换

我的平板电脑应用程序针对不同的UI模式有一个活动和几个不同的布局 - 这些布局中的每一个都使用<fragment>标签来填充具有不同片段的UI(在Activity切换模式中调用setContentView).

如何以这种方式加载新片段时,如何使用过渡动画淡入?现在,在片段加载时,在模式之间切换会产生闪烁效果.

谢谢!

android android-layout android-fragments android-3.0-honeycomb

5
推荐指数
1
解决办法
1805
查看次数

在调用构造函数时重写方法时调用了什么?

甚至有一个术语吗?它完全逃脱了我.

例:

TableLayout tableLayout = new TableLayout(context){
    @Override
    protected void onDetachedFromWindow(){
        super.onDetachedFromWindow();
        getRidOfDialog();
    }
};
Run Code Online (Sandbox Code Playgroud)

java

5
推荐指数
1
解决办法
132
查看次数

分隔来自套接字的数据

在我的Java应用程序中,有一个Socket打开,正在从其InputStream读取数据.

在最佳条件下,每个进入的数据包都会导致调用read()返回其应用程序层数据.这就是我想要获得的 - 每个数据包一个'消息' .

但是,有可能根据getReceiveBufferSize()返回的内容在套接字中缓冲数据.如果发生这种情况并且从中读取流,则可能存在来自多个数据包的数据.

是否有另一种从单个数据包中获取数据的方法,或者这是否违反了抽象层?或者,是否可以为数据添加到缓冲区时设置某种分隔符?或者是平台级别的东西是无法完成的?

以下是一些示例代码,用于演示我正在做的事情:

import java.io.InputStream;
import java.net.Socket;

public class Belnets {


public Belnets() {
    try{
        Socket s = new Socket("address", 23);
        System.out.println("platform will buffer this much: "+s.getReceiveBufferSize());
        InputStream sin = s.getInputStream();
        byte[] data = new byte[1024];
        int c;
        while(true){
            c = sin.read(data);
            for(int i=0; i<c; i++){
                System.out.print((char)data[i]);
            }
            System.out.println("=END OF READ=");

            //if you dont do this, read() seems to return once for each packet as this loop 
            //appears to be running fast enough …
Run Code Online (Sandbox Code Playgroud)

java sockets networking

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

访问Java Singleton私有成员的正确方法

如果您有一个如下所示的Java Singleton:

public class MySingleton {

private static MySingleton instance;

private int member;

public static MySingleton getInstance(){
    if(instance==null){
        instance = new MySingleton();
    }
    return instance;
}

private MySingleton(){
    //empty private constructor
}

public int getMemberA(){
    return member;
}

public int getMemberB(){
    return instance.member;
}

}
Run Code Online (Sandbox Code Playgroud)

... getMemberA和getMemberB之间有区别吗?也就是说,访问会员instance.xxx和刚刚之间存在差异xxx吗?

注意:我知道使用Singleton模式的优缺点!

java singleton

2
推荐指数
1
解决办法
2002
查看次数