0

サーバーから値を収集してデータベースにロードする SherlockFragmentActivity クラスがあります。この SherlockFragmentActivity は、Book、Video、Audios という 3 つの Fragment です。それらのそれぞれは、データベースにダウンロードされた値を表示するためのものです。今の課題は、UI を開いたときに、値がフラグメントのリストに入力される前に各フラグメントをクリックし始めるまで、フラグメントの値が表示されないことです。そして、この値が継続的に追加されていることにも気付きました。私のフラグメントクラスを以下に貼り付けます。

    public class BooksFragment extends SherlockListFragment{

    TextView textview = null;
    String CategoryID = null;

    ArrayList<HashMap<String,String>> listBooks = null;

    IDatabaseHelper databaseHelper = null;

    Activity activity = null;
    Context context = null;

    ListAdapter adapter = null;


    public BooksFragment(){

        super();
    }


     @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.books, container, false);
        // do your view initialization heres
        textview = (TextView)view.findViewById(R.id.textView1);



        return view;
      }



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

         listBooks = new ArrayList<HashMap<String,String>>();

     }


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


            Bundle bundle =this.getArguments();

            if(bundle != null){
                CategoryID = bundle.getString("CategoryID");           
            }

            this.initializeComponents();
            this.populateListView();
      }


      @Override
      public void onActivityCreated(Bundle savedInstanceState){
          super.onActivityCreated(savedInstanceState);

          activity = getActivity();
          context = activity.getBaseContext();

          databaseHelper= new DatabaseHelper(context);


      }


      //Now we are going to initialize components of the fragment
      private void initializeComponents(){

          ListView listview = getListView();
          listview.setOnItemClickListener(listener);
      }


      //list item click listener
        private OnItemClickListener listener = new OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // TODO Auto-generated method stub

            }


         };


         //This method would be used to collect content from the database and populate the listview item
         private void populateListView(){
             MedicalBookModel[] booksmodel = this.databaseHelper.ReturnBooks(CategoryID);

             if(booksmodel != null){
                 for(MedicalBookModel book : booksmodel){

                     HashMap<String,String> bookMap = new HashMap<String,String>();
                     bookMap.put(MedicalBookModel.MedicalBookModel_ID, book.getID());
                     bookMap.put(MedicalBookModel.MedicalBookModel_Name,book.getName());

                     Log.i("values",book.getName());

                     listBooks.add(bookMap);
                 }
             }

             adapter = new SimpleAdapter(context, listBooks,R.layout.list_book,new String[]{ "ID","Name"}, new int[]{ R.id.bookId, R.id.bookName});
             setListAdapter(adapter);
         }


}
4

1 に答える 1

1

そのためには、いくつかの解決策があります:

1-グローバルなアプリケーションインスタンスシングルトンの使用

2-データを管理する独自のグローバル クラスを作成する

3-アクティビティにバインドされたサービス(またはそうでない)とコールバック(おそらくインテントおよびブロードキャストレシーバー)を使用します

4-フラグメントを追加するときに、オブジェクトを引数でパーセブルとして渡します

データを強制的に更新するためにビューを無効にする必要がある場合があることに注意してください

認識可能なオブジェクトの例

public class ImageObject implements Parcelable {
    /**
     * ATTRIBUTES
     */
    protected String    _idPicture;
    protected String    _idAlbum;
    protected String    _name;
    protected String    _fileName;
    protected String    _imageUrl;
    protected String    _hierarchy;

    public ImageObject(String _idPicture, String _idAlbum, String _name, String _fileName, String _imageUrl, String _hierarchy) {

        super();
        this._idPicture = _idPicture;
        this._idAlbum = _idAlbum;
        this._name = _name;
        this._fileName = _fileName;
        this._imageUrl = _imageUrl;
        this._hierarchy = _hierarchy;
    }

    public ImageObject(Parcel in) {

        String[] data = new String[6];
        in.readStringArray(data);
        this._idPicture = data[0];
        this._idAlbum = data[1];
        this._name = data[2];
        this._fileName = data[3];
        this._imageUrl = data[4];
        this._hierarchy = data[5];
    }

    public static final Parcelable.Creator  CREATOR = new Parcelable.Creator() {
                                                        public ImageObject createFromParcel(Parcel in) {

                                                            return new ImageObject(in);
                                                        }

                                                        public ImageObject[] newArray(int size) {

                                                            return new ImageObject[size];
                                                        }
                                                    };

    @Override
    public int describeContents() {

        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {

        dest.writeStringArray(new String[] { this._idPicture, this._idAlbum, this._name, this._fileName, this._imageUrl, this._hierarchy });
    }
}
于 2013-10-02T12:57:02.910 に答える