【问题标题】:Populate ListView only once on fragment with SlidingMenu android使用 SlidingMenu android 在片段上仅填充一次 ListView
【发布时间】:2014-12-13 17:46:40
【问题描述】:

我是 android 开发新手,我正在使用 jfeinstein10 的 SlidingMenu 库开发一个应用程序,我在主屏幕上列出了一些评价最高的数据... 现在我通过从 SQLite 获取数据并在片段活动中放入 ListView 来做到这一点

首页片段

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.home_fragment, container, false);
    new ManageSQLiteResponse((ListView)rootView.findViewById(R.id.lv_top_rate)).execute();

    return rootView;
}

ManagerSQLiteResponse 调用:

public void updateList(ListView listView){
    DietsListAdapter adapter = new DietsListAdapter(getActivity(), R.layout.single_top_rate, dietList);
    listView.setAdapter(adapter);
}

而且每次我通过在 SlidingMenu 上选择来切换片段时,所有的 ListView 都会再次填充,这会导致一些延迟,并且菜单不会顺利打开或关闭...

那么,有什么方法可以运行 AsyncTask.execute() 并只填充一次 ListView,而不是每次创建片段时?通过这个我认为它会停止落后于 SlidingMenu

TVM

【问题讨论】:

  • 尝试将片段存储在 backstack 中。
  • 你能解释一下我是怎么做到的吗?我对这一切都很陌生

标签: android listview fragment slidingmenu


【解决方案1】:

使用此方法在您的容器布局中添加片段。

public void replaceFragment(Fragment fragment) {
    String backStateName = fragment.getClass().getName();

    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction ft = manager.beginTransaction();
    ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);

    Fragment fragmentPopped = manager.findFragmentByTag(backStateName) ;

    if ( fragmentPopped != null ) 
        manager.popBackStack(backStateName, 0);
    else
        ft.replace(R.id.container, fragment);

    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.addToBackStack(backStateName);
    ft.commit();
}

看看在这样的代码中创建条件,如果

if ( adapter.getCount() > 0 )
{
   // dont add listview.setadapter() method here.
}
elsse
{
   // load data in listview.
}

【讨论】:

  • 我在这样的片段之间切换: public void switchContent(Fragment fragment) { this.fragment = fragment; getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, fragment).commit(); getSlidingMenu().showContent(); } 我可以在这里进行一些编辑吗?
  • 如果您不将片段添加到后台堆栈,它将每次都创建
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多