- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Android 编程新手。
我用谷歌搜索和 stackoverflow,阅读了 android 文档,但没有任何帮助,或者我可能不太理解。
我正在尝试通过 ViewPager 的 onPageSelected 对 AsyncTask UI 进行分段。
像 AndroMoney 应用程序 ViewPager(在 onPageSelected 之前,它显示“正在加载...”,在 onPageSelected 时,它 AsyncTasked 并加载。):
AndroMoney ViewPager Fragment Screenshoot
但我的代码是:它在滑动时异步执行,有时它会在两个 fragment 之间停止,如下所示:
与 AndroMoney 应用程序不同,我的代码不会异步处理 onPageSelected。
这里是 MyFragment.java:
public class MyFragment extends Fragment {
public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE";
final StringBuilder buffer=new StringBuilder();
View v;
public static final MyFragment newInstance(int message) {
MyFragment f = new MyFragment();
Bundle bdl = new Bundle(1);
bdl.putInt(EXTRA_MESSAGE, message);
f.setArguments(bdl);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
v = inflater.inflate(R.layout.myfragment_layout, container, false);
new AsyncDatabase().execute();
return v;
}
public class AsyncDatabase extends AsyncTask<Void,Void,Void>{
@Override
protected Void doInBackground(Void... params){
int message = getArguments().getInt(EXTRA_MESSAGE);
BibleService bService=new BibleServiceImpl(getActivity().getApplication());
List<Bible> bible=bService.getBibleByChapterNumber("Salm", message);
for(Bible b: bible){
for(int i=0;i<10;i++){
buffer.append(b);
}
}
return null;
}
@Override
protected void onPostExecute(Void result){
TextView txt1=(TextView)v.findViewById(R.id.textView1);
TextView txt2=(TextView)v.findViewById(R.id.textView2);
txt1.setText("Done");
txt2.setText(buffer.toString());
}
@Override
protected void onPreExecute(){
TextView txt1=(TextView)v.findViewById(R.id.textView1);
txt1.setText("Loading...");
}
@Override
protected void onProgressUpdate(Void... values){
}
}
}
这里是 PageViewActivity.java:
public class PageViewActivity extends FragmentActivity{
MyPageAdapter pageAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_page_view);
List<Fragment> fragments = getFragments();
pageAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments);
ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
pager.setOffscreenPageLimit(1);
pager.setAdapter(pageAdapter);
pager.setCurrentItem(11);
pager.setOnPageChangeListener(new OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {
}
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}
public void onPageSelected(int position) {
}
});
}
private List<Fragment> getFragments() {
List<Fragment> fList = new ArrayList<Fragment>();
for (int j = 2; j < 150; j++) {
fList.add(MyFragment.newInstance(j));
}
return fList;
}
private class MyPageAdapter extends FragmentStatePagerAdapter {
private List<Fragment> fragments;
public MyPageAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
}
我傻傻的测试了一下,添加了如下代码:
public void onPageSelected(int position) {
new MyFragment().new AsyncDatabase().execute();
}
没用。:-P
那么,如何像 AndroMoney 应用那样从 PageViewActivity 的 onPageSelected 异步任务到 fragment 。
最佳答案
在 fragment 中公开一个新方法:
public void executeAsyncTask() {
new AsyncDatabase().execute();
}
在 Activity 中,使您的 fragment 列表成为最终 fragment ,以便您可以在适配器中访问它:
final List<MyFragment> fragments = getFragments();
然后将您的 onPageSelected() 方法更改为:
public void onPageSelected(int position) {
fragments.get(position).executeAsyncTask();
}
您还需要更新 MyPagerAdapter 以使用 MyFragment 而不是 Fragment:
private class MyPageAdapter extends FragmentStatePagerAdapter {
private List<MyFragment> fragments;
public MyPageAdapter(FragmentManager fm, List<MyFragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
}
private List<MyFragment> getFragments() {
List<MyFragment> fList = new ArrayList<MyFragment>();
for (int j = 2; j < 150; j++) {
fList.add(MyFragment.newInstance(j));
}
return fList;
}
关于java - 如何从 ViewPager 的 onPageSelected 异步任务到 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20778865/
我需要 viewpager 的选定位置,但要做到这一点,我应该创建这样的内部类。 ViewPager Karosel = findViewById(R.id.karosel); Karosel.add
我遇到的问题是 ViewPager 没有为 0 项调用 onPageSelected。代码示例: public class PagerActivity extends ActionBarActivit
我的寻呼机适配器(扩展 PagerAdepter)中有一个 TextView 。我用 MainActivity 的 onPageSelected 更新了这个 TextView 。其位置 > 0 的更新
我在回收 View 中使用 vp2 override fun convert(helper: BaseViewHolder, item: Tweet) { va
我有一个 FragmentStatePagerAdapter,里面有 6 个 fragment 。 每个 fragment 都连接到服务器并加载数据。 现在,服务器连接正在 Fragment.onSt
我使用以下示例设置了一个 simpleonpagechangelistener: Android SimpleOnPageChangeListener - Determine swipe direct
我需要实现 setOnPageChangeListener因为我需要隐藏某些 item来自 ActionBar如果第一个 fragment 显示给用户。 我的简单代码: viewPager.s
所以看起来当使用 ViewPager 时,onPageSelected 监听器不会被调用为第一页与 this 相同的问题. 我有一些逻辑可以为当前选定的页面填充一些更昂贵的 UI 元素,并且在页面更改
我正在使用 ViewPager 循环浏览一组 fragment ,我想在每个 fragment 滑到屏幕上后对其进行更新。基本上,我希望文本在 fragment 稳定后“淡入”。 我尝试使用 frag
我有一个带有 WebView 页面的 ViewPager。页面有一个文本字段,允许用户输入内容。在页面之间移动时(通过向前/向后滑动),我想将页面的输入文本保存到 Java 变量中。 不幸的是,onP
我的 Activity 中有一个 ViewPager,用于在其中显示一些图像。由于 OutOfMemoryException 错误,我无法在 onCreate 方法中将所有图像添加到 ViewPage
现在这对我来说是个大问题,因为我需要从接口(interface)调用方法我 viewpager 中的所有 fragment 都在实现。我需要做这样的事情: @Override public void
我有一个 ViewPager有 3 个 fragment ;在我处理的主要 Activity 中 onPageChangeListener : private class CustomPageChan
对于我的项目,我使用可滑动的选项卡在列表之间导航。当删除其中一个列表时,我希望有一个流畅的动画并尝试通过使用 viewpager.setCurrentItem(page, true); 来存档它,以便
我将 FragmentPagerAdapter 与 FragmentActivity 结合使用来创建可滑动的 fragment 。 我在 pagerAdapter 中的第一个 fragment 看起来
我在这里看到了一些类似的帖子,但没有合适的答案。 我使用事件 onpageselected in a viewpager 来执行一个函数。此功能依赖于网络,因此可能需要一些时间。但是幻灯片动画看起来很
我有一个带有标签的 ViewPager + ActionBar。当我“滑动”到另一个选项卡时,我想隐藏软键盘,但我不知道如何。 我已将我的 Activity 传递给 FragmentPageAdapt
我有一个带有 ViewPager 的 Activity,它显示一堆图片。当它启动时,ViewPager 的位置是根据用户在前一个 Activity 中选择的内容设置的。类似于画廊。 我希望每次选择新页
我正在使用 JetPack Compose Pager来自 Accompanist,我想知道我如何确切知道我的页面何时显示在屏幕上。点赞 onPageSelected 来自 ViewPager 的方法
在尝试连接我的 stringArray/ViewPager 后,我收到致命异常/空指针异常。我不确定到底出了什么问题(或者我是否应该注意出现在我的 logcat 中的 Unexpected value
我是一名优秀的程序员,十分优秀!