2013-05-10 79 views
0

我已經閱讀了關於這類問題的一些問題,但是我無法解決它。在對話框關閉後更新ListView(在片段中)

我有這樣的:

public class Classwork extends FragmentActivity { 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_homework); 
    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 
} 

public class SectionsPagerAdapter extends FragmentStatePagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 



    @Override 
    public Fragment getItem(int position) { 
     // getItem is called to instantiate the fragment for the given page. 
     // Return a DummySectionFragment (defined as a static inner class 
     // below) with the page number as its lone argument. 
     Fragment fragment = new DummySectionFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1); 
     args.putInt("posizione", position); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     //code for number of pages 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     //code for return the title 
    } 



} 


public class DummySectionFragment extends Fragment { 
    public static final String ARG_SECTION_NUMBER = "section_number"; 

    public DummySectionFragment() { 
    } 


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

     //query to populate ListView 
     //ListView with CustomAdapter 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> myAdapter, View myView, int myItemInt, long mylng) { 
       //Start new activity DialogDeleteAddGradeCopy 

      } 
     }); 
     myDbHelper.close(); 
     return rootView; 
    } 
} 

}

我與Eclipse嚮導創建它。 DummyFragment包含一個ListView,用SQLite查詢填充(正確)。 單擊ListView的一個項目時,會顯示一個「對話框」(實際上是一個對話框樣式的活動)。

對話框:

public class DialogDeleteAddGradeCopy extends Activity { 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //retrive data form Intent for the update in the db 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 

      //update the db 
       finish(); 
      } 
     } 
    }); 

}

該對話框允許用戶更新(用分貝查詢)點擊的項目的值中的一個。 所有工作正常,除了碎片的更新。更新查詢是可以的(當對話框關閉時數據庫是最新的),但是爲了更新片段,我需要向左或向右滑動兩次,然後返回(這樣片段被重新創建,所以所有的作品精細)。

我該如何強制更新/重新創建碎片?

在此先感謝。

對不起,我的英文不好...

+0

在片段的onResume()中嘗試CustomAdapter.notifyDataSetChanged() – nicous 2013-05-10 18:30:12

+0

什麼都沒有發生......當對話框關閉(finish())但仍然沒有更新ListView時,會調用onResume()。不管怎麼說,還是要謝謝你。 – rivamarco 2013-05-10 18:44:16

回答

0

通常使用的Fragment多個實例時,(你是基於左輕掃,我猜/向右滑動評論)你不想更新內容使用Intent與使用Interface的活動相同。

如果數據來自另一個由同一活動託管的Fragment,例如在ViewPager或標籤設置中,您可以在信息發送片段和主機活動之間建立一個接口,然後調用公共方法更新從主機活動內部收集片段。 using an interface to update fragments的基礎知識可以在這裏找到。我不知道你整個項目的具體情況,但我會研究這個。

至於什麼貼:

你的代碼不能正常表現,因爲getItem是在此方面不正確。當你傳遞一個意圖更新信息,需要找一個新的信息Bundle你應該使用

@Override 
protected void onNewIntent(Intent intent) { 
    // TODO Auto-generated method stub 
    super.onNewIntent(intent); 
} 

你可能要設置活動標誌,以得到這個工作(例如FLAG_ACTIVITY_SINGLE_TOP),但basicly的想法當新的意圖傳遞給您的活動時,將更新onNewIntent。現在使用getItem只會在片段初始創建並設置參數時更新。

相關問題