我有登录的登录页面,如果用户点击登录按钮,它将转到tabactivity。在标签活动中,我有四个选项卡:主页,库存等。从tabactivity我调用嵌套活动的活动组。从活动组我称之为家庭活动。从家里我加载标签栏并调用webservices并解析值并在home选项卡中加载主页活动。这需要时间。我该如何避免黑屏?谁能举个例子?我已经尝试了很多,但它没有用。如果有人知道,请给出代码。 在第二个活动中,我将标签栏加载到加载的标签并调用webservices。我必须展示一些启动画面。
我在doInBackground
方法中添加了tabbar,这是正确的吗?
import java.util.ArrayList;
//import com.inquest.LoginActivity.FetchTask;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.app.TabActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Typeface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Gravity;
import android.view.Window;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TabHost;
import android.widget.TabWidget;
import android.widget.TextView;
import android.widget.TabHost.TabSpec;
//TabActivity
public class HelloTabWidget extends TabActivity
{
int width =40;
int height =49;
//private TabHost tabHost;
TextView txthome;
TextView txtstock;
TextView txtcitn;
TextView txtmyquest;
Button btn;
//private ProgressDialog pd = null;
private ProgressDialog dlg;
private Object data = null;
String strusername="";
String strPassWord="";
String questGroupId="";
String userid="";
String systemuserid="";
String providerid="";
private ProgressDialog dialog;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setProgressBarIndeterminateVisibility(true);
setContentView(R.layout.tab);
new TabTask(HelloTabWidget.this).execute(null);
//}
}
public class TabTask extends AsyncTask<Void, Void,Void>
{
private ProgressDialog dlg;
private Context ctx;
public TabTask(Context context) {
ctx = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
dlg = new ProgressDialog(HelloTabWidget.this);
dlg.setMessage("Loading....");
dlg.show();
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
try
{
TabHost.TabSpec spec;
TabHost tabHost=getTabHost();
TabWidget tabWidget = tabHost.getTabWidget();
Resources res = getResources();
Typeface myTypeface = Typeface.createFromAsset(ctx.getAssets(),"verdanab.TTF");
Typeface myTypeface1 = Typeface.createFromAsset(ctx.getAssets(),"verdana.TTF");
Intent homeintent;
// Create an Intent to launch an Activity for the tab (to be reused)
homeintent = new Intent();
Bundle bundle=getIntent().getExtras();
String strusername=bundle.get("strUserName").toString();
String strPassWord=bundle.get("strPassword").toString();
String questGroupId=bundle.get("questGroupId").toString();
String userid=bundle.get("userid").toString();
String systemuserid=bundle.get("systemuserid").toString();
String providerid=bundle.get("providerid").toString();
Log.d("home activity username", strusername);
Log.d("home activity password", strPassWord);
Log.d("home activityquestGroupId",questGroupId);
homeintent.setClass(ctx, HomeActivityGroup.class);
homeintent.putExtra("strUserName", strusername);
homeintent.putExtra("strPassWord",strPassWord );
homeintent.putExtra("questGroupId",questGroupId);
homeintent.putExtra("userid",userid);
homeintent.putExtra("systemuserid", systemuserid);
homeintent.putExtra("checking", "one");
spec = tabHost.newTabSpec("home").setIndicator("Home",res.getDrawable(R.drawable.home_tab_bar_icon)).setContent(homeintent);
tabHost.addTab(spec);
//homeintent = new Intent().setClass(this,ThemeSearchActivity.class);
homeintent = new Intent().setClass(ctx,StockActivity.class);
homeintent.putExtra("strUserName", strusername);
homeintent.putExtra("strPassWord",strPassWord );
homeintent.putExtra("questGroupId",questGroupId);
homeintent.putExtra("userid",userid);
homeintent.putExtra("systemuserid", systemuserid);
homeintent.putExtra("providerid", providerid);
spec = tabHost.newTabSpec("stock").setIndicator("Stock",res.getDrawable(R.drawable.stocks_tab_bar_icon)).setContent(homeintent);
tabHost.addTab(spec);
homeintent = new Intent().setClass(ctx,ArticleActivity.class);
spec = tabHost.newTabSpec("citn").setIndicator("CITN",res.getDrawable(R.drawable.citn_tabbar_icon)).setContent(homeintent);
tabHost.addTab(spec);
homeintent = new Intent().setClass(ctx, MyCompaniesActivity.class);
spec = tabHost.newTabSpec("myquest").setIndicator("My Quest",res.getDrawable(R.drawable.quest_tab_bar_icon)).setContent(homeintent);
tabHost.addTab(spec);
for (int i =0; i < tabWidget.getChildCount(); i++) {
//tabWidget.getChildAt(i).setBackgroundColor(R.color.black);
tabWidget.getChildAt(i).getLayoutParams().height = height;
tabWidget.getChildAt(i).getLayoutParams().width = width;
RelativeLayout relLayout = (RelativeLayout)tabWidget.getChildAt(i);
TextView tv = (TextView)relLayout.getChildAt(1);
tv.setTextSize(10.0f);
//tv.setCompoundDrawablesWithIntrinsicBounds(0, 1, 0, 0);
tv.setTypeface(myTypeface1);
}
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return null;
}
}
}
答案 0 :(得分:3)
您需要在Tabbar活动中实施 AsyncTask 功能。
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
// Things to be done before execution of long running operation. For example showing ProgessDialog
}
@Override
protected String doInBackground(String... params) {
// perform long running operation operation
return null;
}
@Override
protected void onPostExecute(String result) {
// execution of result of Long time consuming operation
}
@Override
protected void onProgressUpdate(Void... values) {
// Things to be done while execution of long running operation is in progress. For example updating ProgessDialog
}
}
答案 1 :(得分:1)
我也有同样的问题,但我的问题是通过将此属性添加到活动来解决的:
[Activity(Theme = "@android:style/Theme.Translucent.NoTitleBar")]
试试吧。
答案 2 :(得分:0)
这很简单只是不要在onCreate()方法中调用任何长时间运行的任务,它会阻止你的活动创建,直到任务完成。
只需在此方法下定义UI任务,并从onStart()或onResume()方法调用任何其他调用。
尽量保持你的oncreate()方法精简版。