Android 根据ViewPager状态显示对话框
我有一个Android 根据ViewPager状态显示对话框,android,dialog,android-viewpager,Android,Dialog,Android Viewpager,我有一个ViewPager,让我们想象一下,我在第0页 我在这个页面上有一个按钮,点击这个按钮,我想显示一个对话框,并将页面更改为第1页 当我的页面更改为第1页时,我希望对话框消失 当我这样做的时候,我没有看到对话框,当页面被更改时,对话框出现并消失,但我确信,在这两个操作之间我有1000毫秒的延迟 请帮助,我如何显示对话框 package com.example.ViewPagerDialog; import android.app.Activity; import android.app.
ViewPager
,让我们想象一下,我在第0页
我在这个页面上有一个按钮,点击这个按钮,我想显示一个对话框,并将页面更改为第1页
当我的页面更改为第1页时,我希望对话框消失
当我这样做的时候,我没有看到对话框,当页面被更改时,对话框出现并消失,但我确信,在这两个操作之间我有1000毫秒的延迟
请帮助,我如何显示对话框
package com.example.ViewPagerDialog;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
public class MyActivity extends Activity {
private int currentPage;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final MyViewPager viewPager = (MyViewPager) findViewById(R.id.view_pager);
final Button leftSwitcher = (Button) findViewById(R.id.left_switcher);
final Button rightSwitcher = (Button) findViewById(R.id.right_switcher);
final ProgressDialog progressDialog = new ProgressDialog(this);
leftSwitcher.setVisibility(View.GONE);
progressDialog.setTitle("Wait...");
viewPager.setAdapter(new MyPagerAdapter(this));
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
public void onPageScrolled(int i, float v, int i2) {
}
public void onPageSelected(int i) {
progressDialog.dismiss();
currentPage = i;
if (i == 0) {
leftSwitcher.setVisibility(View.GONE);
} else if (i == 1) {
leftSwitcher.setVisibility(View.VISIBLE);
rightSwitcher.setVisibility(View.VISIBLE);
} else if (i == 2) {
rightSwitcher.setVisibility(View.GONE);
}
}
public void onPageScrollStateChanged(int i) {
}
});
leftSwitcher.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
progressDialog.show();
sleepThread();
viewPager.setCurrentItem(currentPage - 1);
}
});
rightSwitcher.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
progressDialog.show();
sleepThread();
viewPager.setCurrentItem(currentPage + 1);
}
});
}
private void sleepThread() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private class MyPagerAdapter extends PagerAdapter {
View[] views = new View[3];
public MyPagerAdapter(Context context) {
TextView view1 = new TextView(context);
TextView view2 = new TextView(context);
TextView view3 = new TextView(context);
view1.setText("View 1");
view2.setText("View 2");
view3.setText("View 3");
views[0] = view1;
views[1] = view2;
views[2] = view3;
}
@Override
public int getCount() {
return views.length;
}
@Override
public boolean isViewFromObject(View view, Object o) {
return (view.equals(o));
}
@Override
public Object instantiateItem(ViewGroup collection, int position) {
collection.addView(views[position]);
return views[position];
}
@Override
public void destroyItem(android.view.ViewGroup container, int position, java.lang.Object object) {
container.removeView(views[position]);
}
}
}
首先,不要像您那样使用
thread.sleep()
阻塞UI线程。通过使用Thread.sleep()
基本上可以为对话框设置show命令(在从onCLick()
方法返回后将发生),睡眠一秒钟(应用程序将冻结),然后在ViewPager
上设置页面,该页面将触发侦听器,从而取消对话框。相反,您可以使用处理程序来
private Handler mHandler = new Handler();
// in the onClick method
progressDialog.show();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(currentPage - 1);
}
}, 1000);
你介意公布你目前使用的代码吗?