1

次の2つのクラスとしてSherlockTabNavigationを実装しています。クラスDashboardが主な活動です。クラスDashboardContactsは、タブのフラグメントの1つを表します。

しばらくの間ロードされるHTTPデータをロードしていますが、ロード時にDashboardContacts、サーバーからもたらされた変更を反映し、ListView空白からいっぱいのリストに更新するためにリストビューを表示する必要があります。このために、のnotifyDataSetChangedrefreshメソッドを介してメソッドを呼び出していますが、タブを変更するまでDashboardContacts変更は反映されません。ListView

public class Dashboard extends SherlockFragmentActivity {

    private DashboardContacts contactsTab=new DashboardContacts();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dashboard);

        getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        ActionBar.Tab tab = getSupportActionBar().newTab();
        tab.setText(getResources().getStringArray(R.array.dashboardTabs)[0]);
        tab.setTabListener(new DashboardHome());
        getSupportActionBar().addTab(tab);

        ActionBar.Tab tab2 = getSupportActionBar().newTab();
        tab2.setText(getResources().getStringArray(R.array.dashboardTabs)[1]);
        tab2.setTabListener(contactsTab);
        getSupportActionBar().addTab(tab2);

        //CALLS ASYNCLOADER HERE TO LOAD HTTP DATA
    }

    private void httpSuccessMethod() {
        //Does some work and then calls:
        contactsTab.refresh(datasource.getAllContacts());

    }

DashboardContactsクラスのレイアウトは次のとおりです。

public class DashboardContacts extends SherlockListFragment  implements ActionBar.TabListener{

    private UserListAdapter listAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        listAdapter=new UserListAdapter(container.getContext(), ApplicationState.getInstance(container.getContext()).getUserCache());
        setListAdapter(listAdapter);
        return super.onCreateView(inflater, container, savedInstanceState);
    }

    @Override
    public void onStart() {
        super.onStart(); 
    }


    @Override
    public void onTabSelected(Tab tab,android.support.v4.app.FragmentTransaction ft) {
        ft.replace(android.R.id.content, this,"contacts");
        ft.attach(this);
    }

    @Override
    public void onTabUnselected(Tab tab,android.support.v4.app.FragmentTransaction ft) {
        ft.detach(this);

    }

    @Override
    public void onTabReselected(Tab tab,android.support.v4.app.FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }


        public void refresh(List<User> list) {
        if(this.listAdapter != null) {
        this.listAdapter.setList(list);
        this.listAdapter.notifyDataSetChanged();
    }
}

カスタムリストアダプタのrefreshメソッドは次のようになっているので、実際にそこでもデータを変更しています。

public void refresh(List<User> list) {
    if(this.listAdapter != null) {
        this.listAdapter.setList(list);
        this.listAdapter.notifyDataSetChanged();
    }
4

1 に答える 1

0

これは私が実装しなかったものだと思うので、今それを実行して問題を解決しました。

public void setList(List<ExpensePool> list) {
    clear();
    addAll(list);
    notifyDataSetChanged();
}   
于 2012-10-28T14:43:05.367 に答える