SwitchDisplayable a la Android

时间:2010-11-25 19:45:26

标签: java android java-me

我仍然将J2ME应用程序移植到Android,现在我的问题在于GUI。 对于我所看到的,Android的活动很棒,但我的J2ME充满了经典:

public void switchDisplayable(Alert alert, Displayable nextDisplayable) {
        Display display = getDisplay();
        if (alert == null)
            display.setCurrent(nextDisplayable);
        else 
            display.setCurrent(alert, nextDisplayable);
}

我无法将每个Displayable都设为Activity,所以我想用View替换它们。我试过了,但它不起作用,应用程序不会改变屏幕。

更新

感谢您的回答,但是在FrameLayout中放置了一些,但仍然没有。这是我的测试代码的核心,因此您可以查看它:

public class TestActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
        setContentView(R.layout.main);
        TextView t = (TextView)findViewById(R.id.text); // Shows "Hi"
        showDialog(); // it just shows a dialog asking if the user wants to change screen

    }
    showDialog() {
        // in OnClick()... i do the following, and here is where it fails, i tried so far:        
        TestView testv= new MarcoLoco(MFActivity.this);
    setContentView(testv);
        testv.invalidate();
    testv.requestFocus();
    testv.showMeSomething();
    }


public class TestView extends View{
    private Context context;
    TextView tv;    
    public TestView(Context context) {
        super(context);
        this.context=context;
    }   
    public void showMeSomething() {
        tv = (TextView)findViewById(R.id.tessto); // it should show "Bye"
    }
}

OnClick后,“Hi”从屏幕上消失但没有出现,没有“再见”。

为什么,哦,为什么!?

3 个答案:

答案 0 :(得分:0)

我对Java ME没有任何考虑,但这可能对您有所帮助

将您的观点放在FrameLayout内,然后您可以使用

mViewA.setVisibility(View.VISIBLE);
mViewB.setVisibility(View.GONE);
mViewA.requestFocus();

在不同视图之间切换

编辑:

这是一个简短的示例程序,可在两个文本视图之间切换:

public class test extends Activity {
    boolean showTV1 = true;

    OnClickListener ocl = new OnClickListener() {
        @Override
        public void onClick(View v) {
            showTV1= !showTV1;
            if (showTV1){
                tv1.setVisibility(View.VISIBLE);
                tv2.setVisibility(View.GONE);
                tv1.requestFocus();
            } else {
                tv2.setVisibility(View.VISIBLE);
                tv1.setVisibility(View.GONE);
                tv2.requestFocus();
            }
        }
    };

    private TextView tv1, tv2;  

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv1 = (TextView) findViewById(R.id.TextView01); 
        tv2 = (TextView) findViewById(R.id.TextView02);

        tv1.setOnClickListener(ocl);
        tv2.setOnClickListener(ocl);
    }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frameLayout01" android:layout_width="fill_parent"
    android:layout_height="fill_parent"  >
    <TextView android:id="@+id/TextView01" android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:background="#0f0"
        android:text="Hi" />
    <TextView android:id="@+id/TextView02" android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:background="#f00"
        android:text="Bye" android:visibility="gone"/>
</FrameLayout>

答案 1 :(得分:0)

我不确定我是否完全理解您的问题,但请尝试查看ViewAnimatorViewFlipper - 也许这些可以提供帮助

PS。只是出于好奇...你试过任何自动转换器吗?

答案 2 :(得分:0)

为什么要自己从J2ME移植到Android,而不是使用转换工具? 更快,无需学习和擅长Android,无需调试和维护2个代码库...请在www.UpOnTek.com上试一试。感谢。