我正在尝试编写一个简单的计时器应用程序。我正在创建一个扩展计时器的计数器类。无论如何,当我在onCreate()中将自定义计时器添加到我的布局时,它不会被绘制。它只会在我切换到另一个选项卡后才会被绘制,然后返回到“计数器选项卡”。之后它停留了。基本上,我如何画它?我试过调用invalidate()但似乎什么都没有用。
以下是相关代码:
这是在我的onCreate()中。我将自定义Chronometer添加到名为linLay的线性布局中。
public class TimerMain extends Activity {
// Handle to the tabhost
public TabHost tabHost;
// Handle to the tab widget (this is the view that has the two tabs)
public TabWidget tabWidget;
// Handle to the LinearLayout inside the ScrollView
public LinearLayout linLay;
// Spec used to create the tabs
public TabSpec spec;
// Up Counter handle
public UpCounter myUpCounter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the view to the main layout (see main.xml)
setContentView(R.layout.main);
// Get the handle to the tabhost in the layout and set it up
tabHost = (TabHost) this.findViewById(R.id.my_tabhost);
tabHost.setup();
// Get the handle to the TabWidget that is in the
// xml file through the TabHost handle
tabWidget = tabHost.getTabWidget();
// Get the handle to the relative layout that is inside of the frame
// that is used for the tab contents
linLay = (LinearLayout) this.findViewById(R.id.LinLay);
// Create the Count Up tab and leave it blank
spec = tabHost.newTabSpec("CU");
spec.setIndicator("Count Up");
spec.setContent(R.id.ScrLay);
tabHost.addTab(spec);
// Create the Count Down tab and leave it blank
spec = tabHost.newTabSpec("CD");
spec.setIndicator("Count Down");
spec.setContent(R.id.ScrLay);
tabHost.addTab(spec);
// Set up the click listeners for each tab
initTabClickListen();
// Start with the Count Up tab selected
tabHost.setCurrentTab(0);
// Initialize the first counters
myUpCounter = initFirstCounters(this.getApplicationContext());
myUpCounter.start();
myUpCounter.setBase(SystemClock.elapsedRealtime());
//Add the first UpCounter to the scroll view
linLay.addView(myUpCounter);
}
@Override
protected void onResume(){
super.onResume();
}
private UpCounter initFirstCounters(Context context) {
UpCounter tempCt;
// Create the first counter
tempCt = new UpCounter(context);
tempCt.setFormat("Initial Format: %s");
return tempCt;
}
// Set up the click listeners for each tab
private void initTabClickListen() {
// Set up the listener for the Count Up Tab
tabWidget.getChildAt(0).setOnClickListener(new OnClickListener(){
public void onClick(View v){
// Detach all views from the layout
// and add the views for this tab.
linLay.removeAllViews();
linLay.addView(myUpCounter);
// Set the current tab to Count Up
tabHost.setCurrentTab(0);
}
});
// Set up the listener for the Count Down Tab
tabWidget.getChildAt(1).setOnClickListener(new OnClickListener(){
public void onClick(View v){
// Detach all views from the layout
// and add the views for this tab.
linLay.removeAllViews();
//scrLay.addView(v2);
// Set the current tab to Count Down
tabHost.setCurrentTab(1);
}
});
}
}
// Custom Counter Class
class UpCounter extends Chronometer{
public UpCounter(Context context) {
super(context);
}
}
最后,如果你想看到它,这里是.xml。我也尝试过删除linearlayout并使用scrollview来代替计时器,我也有同样的问题。
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ScrollView
android:id="@+id/ScrLay"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/LinLay"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
</ScrollView>
</FrameLayout>
</LinearLayout>
</TabHost>
如何在应用程序启动时显示此计数器?
答案 0 :(得分:1)
答案 1 :(得分:0)
我明白了。
出于某种原因,我只是将其添加到onCreate()的代码中:
// Start with the Count Up tab selected
tabHost.setCurrentTab(1);
tabHost.setCurrentTab(0);
现在一切正常!