Android 带有两个ListFragment的ViewPagerIndicator在加载数据时速度较慢

Android 带有两个ListFragment的ViewPagerIndicator在加载数据时速度较慢,android,android-fragments,android-viewpager,viewpagerindicator,Android,Android Fragments,Android Viewpager,Viewpagerindicator,我有一个带有ViewPager和ViewPagerIndicator的应用程序。我做了两个标签​​使用TabPageIndicator。每个选项卡加载一个包含Internet数据的列表。当我运行应用程序从选项卡1和2加载数据时,这会导致显示视图的速度非常慢。 我希望当我启动我的应用程序时只加载数据选项卡1,当我移动或单击选项卡2时加载该选项卡的数据 你能帮我吗 多谢各位 我的代码: 主要活动 public class MainActivity extends FragmentActivity {

我有一个带有ViewPager和ViewPagerIndicator的应用程序。我做了两个标签​​使用TabPageIndicator。每个选项卡加载一个包含Internet数据的列表。当我运行应用程序从选项卡1和2加载数据时,这会导致显示视图的速度非常慢。 我希望当我启动我的应用程序时只加载数据选项卡1,当我移动或单击选项卡2时加载该选项卡的数据

你能帮我吗

多谢各位

我的代码:

主要活动

public class MainActivity extends FragmentActivity {
private static final String[] CONTENT = new String[] { "Releases", "Artists" };
private ListView listRls;
private List<Fragment> listaFragments;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);        


    listaFragments = new ArrayList<Fragment>();
    listaFragments.add(new FragmRls());
    listaFragments.add(new FragmArt());


    MyFragmentAdapter adapter = new MyFragmentAdapter(getSupportFragmentManager(),
            listaFragments);

    ViewPager pager = (ViewPager)findViewById(R.id.pager);
    pager.setAdapter(adapter);

    TabPageIndicator indicator = (TabPageIndicator)findViewById(R.id.indicator);
    indicator.setViewPager(pager);



}

class MyFragmentAdapter extends FragmentStatePagerAdapter {
     //Implementacion del fragmentStateADapter

    private List<Fragment> fragments;

    public MyFragmentAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        // TODO Auto-generated constructor stub
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        // TODO Auto-generated method stub
        return fragments.get(position);
    }

     @Override
     public CharSequence getPageTitle(int position) {
         return CONTENT[position % CONTENT.length].toUpperCase();
     }


    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return fragments.size();
    }



}//fin adapter
}//fin class
public类MainActivity扩展了FragmentActivity{
私有静态最终字符串[]内容=新字符串[]{“发布”、“艺术家”};
私有列表视图列表;
私有列表列表片段;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE\u NO\u TITLE);
setContentView(R.layout.main);
listaFragments=newArrayList();
添加(新FragmRls());
添加(新FragmArt());
MyFragmentAdapter=新建MyFragmentAdapter(getSupportFragmentManager(),
列表碎片);
ViewPager pager=(ViewPager)findViewById(R.id.pager);
寻呼机设置适配器(适配器);
TabPageIndicator=(TabPageIndicator)findviewbyd(R.id.indicator);
指示器。设置视图寻呼机(寻呼机);
}
类MyFragmentAdapter扩展了FragmentStatePagerAdapter{
//fragmentStateADapter的实现
私有列表片段;
公共MyFragmentAdapter(FragmentManager fm,列出片段){
超级(fm);
//TODO自动生成的构造函数存根
this.fragments=片段;
}
@凌驾
公共片段getItem(int位置){
//TODO自动生成的方法存根
返回碎片。获取(位置);
}
@凌驾
公共字符序列getPageTitle(int位置){
返回内容[位置%CONTENT.length].toUpperCase();
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回fragments.size();
}
}//翅片适配器
}//鳍类
从ListFragement扩展的一个类中的代码,另一个是相同的

public class FragmRls extends ListFragment{

JSONParser jParser = new JSONParser();
private static String url_all_post = "http://adeptlabel.com/listReleaseforTab.php";
private static String url_all_art = "http://adeptlabel.com/listArtists.php";
private static final String TAG_SUCCESS = "success";
private static final String TAG_posts = "wp_posts";
private static final String TAG_TITULO = "titulo";
private static final String TAG_IMAGEN = "imagen";      
JSONArray posts = null;

private ArrayList <ElementosList> elementos = new ArrayList <ElementosList>();


public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){

    return inflater.inflate(R.layout.fragmrls, null);

}//Fin On CreateView    

  @Override
   public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        elementos.clear();
        loadDataJsonRls();
        for(int i=0;i<ListViewConfig.getResim_list_txt().size();i++)
        {
            elementos.add(new ElementosList(ListViewConfig.getResim_list_txt().get(i),
                    ListViewConfig.getResim_list_img().get(i)));
        }
        ArrayAdapter<ElementosList>adaptador = new AdaptadorList(getActivity(),elementos);
        setListAdapter(adaptador);

  }

public void loadDataJsonRls()
{
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    // getting JSON string from URL
    JSONObject json = jParser.makeHttpRequest(url_all_post, "GET", params);     
    // Check your log cat for JSON reponse
    Log.d("All releases: ", json.toString());

    try {
        // Checking for SUCCESS TAG
        int success = json.getInt(TAG_SUCCESS);
        if (success == 1) {             
            posts = json.getJSONArray(TAG_posts);               
            //Borramos los arrayList 
            ListViewConfig.deleteResim_list_img();
            ListViewConfig.deleteResim_list_txt();              
            // looping through All post
            for (int i = 0; i < posts.length(); i++) {
                boolean repite = false;
                JSONObject c = posts.getJSONObject(i);
                // Storing each json item in variable
                String titulo = c.getString(TAG_TITULO);
                String imagen = c.getString(TAG_IMAGEN);    
                for(int j=0;j<ListViewConfig.getResim_list_txt().size();j++)
                {
                    if(titulo.equals(ListViewConfig.getResim_list_txt().get(j)))
                    {
                        repite = true;
                    }
                }
                if(repite==false)
                {
                    ListViewConfig.addImageUrls(imagen);
                    ListViewConfig.addTextUrls(titulo);
                }               
            }
        } else {
            //Log.d("MainActivity.class", "No success Json");

    }
    } catch (JSONException e) {
        e.printStackTrace();
    }

}//fin cargarDatosJsonRls()


}//fin class
公共类FragmRls扩展了ListFragment{
JSONParser jParser=新的JSONParser();
私有静态字符串url\u all\u post=”http://adeptlabel.com/listReleaseforTab.php";
私有静态字符串url_all_art=”http://adeptlabel.com/listArtists.php";
私有静态最终字符串标记_SUCCESS=“SUCCESS”;
私有静态最终字符串TAG_posts=“wp_posts”;
私有静态最终字符串标记_TITULO=“TITULO”;
私有静态最终字符串标记_IMAGEN=“IMAGEN”;
JSONArray posts=null;
private ArrayList elementos=new ArrayList();
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
返回充气机。充气(R.layout.fragmrls,空);
}//CreateView上的Fin
@凌驾
创建时的公共void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
elementos.clear();
loadDataJsonRls();

对于(int i=0;i如果要在用户切换到第二个选项卡时加载与该选项卡关联的数据,请尝试将加载数据的代码从onCreate移动到公共方法。然后设置OnPageChangeListener,并在调用onPageSelected时加载数据


此外,请确保异步加载数据,例如使用AsyncTask。

如果在UI线程上进行网络调用,这就是UI速度慢的原因。您可能希望使用AsyncTask,从而有效地将网络活动移动到另一个线程。其doInBackground方法将处理网络事务,onPostExecute方法允许您在任务执行完成时更新UI。更多详细信息,请参阅官方文档


此外,根据您的需要和时间,您可以预加载数据,以缩短用户在屏幕上显示的加载时间,或者在加载数据时显示进度条,然后在加载完成后更新UI。

我在此处找到的问题解决方案:

(


不过,感谢您的关注,Nartus和2Dee。

我将尝试此方法。实现onPageChangeListener很简单,但我必须考虑调用数据加载。我将告诉您结果。谢谢。当我尝试实现OnPageSelected if setListAdapter调用时,我得到错误:方法setListAdapter(ArrayAdapter)对于类型new ViewPager.OnPageChangeListener(){}未定义事实上,我必须这么做,但首先我不想同时从两个选项卡加载数据。谢谢。我不确定你为什么要这样做,但每个选项卡片段都应该启动一个单独的异步任务,这样你就可以等待第一个任务启动第二个任务,尽管我建议不要这样做,因为用户仍然可以直接切换到选项卡2当他/她进入屏幕时。