在应用程序中,我已实现自定义进度条但自定义进度条
第一期: 第一个问题是Progress Bar只显示而不是动画,我在后台使用asynctask从外部数据库加载大量数据。
第二期:第二个问题是,当我点击链接加载大量数据时,它会打开另一个显示加载结果的活动。问题是当我按下链接时加载数据需要7-8秒,并且当切换另一个屏幕时显示黑屏3-4秒,我怎么能避免显示黑屏?
当我按下链接获取加载数据时,它需要3-4秒,在(第一个屏幕)当前屏幕上,然后出现黑屏3-4秒然后显示(第二个屏幕)结果,我不知道为什么它正在发生,我怎么能避免它。 我想当我点击链接然后应该执行一个进度条并进入secondActivity,而不显示黑屏。 请问我应该在第一个屏幕(当前屏幕)或第二个屏幕上使用进度对话框?还是在两个屏幕上?请任何帮助将不胜感激。
这是我的自定义适配器
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
Holder holder=new Holder();
View rowView;
rowView=inflater.inflate(R.layout.nav_navitem,null);
holder.tv=(TextView)rowView.findViewById(R.id.tvlstName);
holder.tv.setTypeface(face);
holder.img=(ImageView)rowView.findViewById(R.id.img);
holder.tv.setText(result[position]);
holder.img.setImageResource(imageId[position]);
rowView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(context,"you Clicked "+result[position],Toast.LENGTH_LONG).show();
if(result[position]=="کھانوں کی فہرست".trim().toString())
{
new AsyncTask<Void, Void, String>() {
@ Override
protected void onPreExecute ( ) {
//for progress bar
progressDialog = new ProgressDialog(context);
progressDialog.show ( ) ;
progressDialog.setContentView(R.layout.custom_progressdialog);
progressDialog.setCancelable(true);
}
@Override
protected String doInBackground(Void... params) {
//stuff that updates ui
context.startActivity(new Intent(context, SecondActivity.class));
return null ;
}
@Override
protected void onPostExecute(String msg) {
if(progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
}
}.execute(null, null, null);
}
当屏幕切换SecondActivity.class然后显示黑屏。
这是SecondActivity类的一些相关代码。
public class SecondActivity extends AppCompatActivity {
private SQLiteDatabase sqLiteDatabase;
public static Typeface face;
ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
face = Typeface.createFromAsset(getAssets(), "font/asunaskh.ttf");
Toolbar toolbar=(Toolbar)findViewById(R.id.sectoolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
CollapsingToolbarLayout collapsingToolbarLayout=(CollapsingToolbarLayout)
findViewById(R.id.collapsing_toolbar);
collapsingToolbarLayout.setTitle("کھانے کی فہرست");
collapsingToolbarLayout.setCollapsedTitleTypeface(face);
collapsingToolbarLayout.setExpandedTitleTypeface(face);
progressDialog = new ProgressDialog(SecondActivity.this);
progressDialog.setMessage("Loading");
progressDialog.setCancelable(true);
new AsyncTask<Void, Void, String>() {
@ Override
protected void onPreExecute ( ) {
progressDialog.show ( ) ;
}
@Override
protected String doInBackground(Void... params) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//stuff that updates ui
show_card();
}
});
return null ;
}
@Override
protected void onPostExecute(String msg) {
if(progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
}
}.execute(null, null, null);
}
//show_card() method goes here
public void show_card(){....}
这是一个自定义进度条,在我点击链接时切换到SecondActivity之前显示 Custom Progress Bar
当活动开关形成电流到另一个活动时,这是Progress BAr的第二个屏幕截图(黑屏)。 Progress Bar Screen Shot
答案 0 :(得分:0)
第一期:您需要在onProgressUpdate()
中实施AsyncTask
来设置进度条的动画。请参阅documentation for AsyncTask。
第二期:我认为这里的问题是您要从AsyncTask
doInBackground
开始第二项活动,该活动不在用户界面上运行线。 (活动应该在UI线程上运行。)onPreExecute
和onPostExecute
都在UI线程上运行,因此您可以在那里移动第二个活动的开始。如果AsyncTask
唯一做的就是启动Activity
,那么您根本不需要AsyncTask
- 只需启动Activity
。
请查看此SO question以及接受的答案以获得一些指导。