2016-04-15 9 views
0

すべてのページに「タイトル」を保存したオンラインデータベースがあります。 Async Taskを使用してサーバーとログステートメントからデータをダウンロードしています。すべてのタイトル文字列が正しく取得されているのがわかりました。 FragmentStatePagerAdapterを使用してMainActivityでページを作成する。 ページを正常に作成できますが、すべてのページに同じデータがあります。すべてのフラグメントに同じデータがページを使用して表示されています。ビューアを使用してページを作成します。

私のMainActivity.java:ページャアダプタもあります。

public class MainActivity extends AppCompatActivity { 
    ViewPager viewPager=null; 
    int numFrag1; 
    String title = "", getTitle= ""; 


    public class TitleDownload extends AsyncTask<Void,Void,String>{ 

     @Override 
     protected String doInBackground(Void... params) { 

      CloudQuery query = new CloudQuery("CollegeFeeds"); 
      query.orderByAsc("updatedAt"); 
      query.include("imageTitle"); 

      try { 
       query.count(new CloudIntegerCallback() { 
        @Override 
        public void done(Integer integer, CloudException e) throws CloudException { 

         if(integer != null){ 

          //int numFrag = integer; 
          noofFrag(integer); 
          //Log.i("no of fragments", String.valueOf(integer)); 
          System.out.println("in background"+ integer); 
         } 
        } 
       }); 
      } catch (CloudException e) { 
       e.printStackTrace(); 
      } 

      try { 
       query.find(new CloudObjectArrayCallback() { 
        @Override 
        public void done(CloudObject[] cloudObjects, CloudException e) throws CloudException { 

         if(cloudObjects != null){ 

          //Log.i("no of fragments", String.valueOf(cloudObjects.length)); 

          for (int i=0; i < cloudObjects.length; i++){ 

           // Log.i("no of fragments", String.valueOf(cloudObjects.length)); 
           title = cloudObjects[i].get("imageTitle").toString(); 
           titleName(title); 
           Log.i("title", title); 
          } 

         } 
         if(e != null){ 
          e.printStackTrace(); 
         } 

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

      return title ; 
     } 
    } 
    public void noofFrag(int data){ 


     numFrag1 = data; 

    } 

    public void titleName(String titleData){ 

     getTitle = titleData; 
     System.out.println("method title" + getTitle); 

    } 

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

     setContentView(R.layout.activity_main); 


     CloudApp.init("qrhjtmypohec", "6e22fd4d-eef9-49b5-87a9-fba0f35075f9"); 

     new TitleDownload().execute(); 

     viewPager = (ViewPager) findViewById(R.id.pager); 

     FragmentManager fragmentManager = getSupportFragmentManager(); 

     viewPager.setAdapter(new MyAdapter(fragmentManager)); 
     //viewPager.setPageTransformer(true,); 


     //actionBar.setDisplayHomeAsUpEnabled(true); 

    } 

    class MyAdapter extends FragmentStatePagerAdapter { 
     public MyAdapter(FragmentManager fm) { 
      super(fm); 
     } 
     public int getItemPosition(Object object) { 
      return POSITION_NONE; 
     } 

     @Override 
     public Fragment getItem(int position) { 

      AttendanceResultFeed fragment = null; 

      for (int i=0; i<4; i++){ 

       if(position == i){ 

        fragment = new AttendanceResultFeed(position); 
        fragment.getTag(); 
        //System.out.println("fragment tag" + fragment.getTag()); 
        //fragment.getNumber(i); 
        Bundle bundle = new Bundle(); 
        bundle.putInt("number", i); 
        bundle.putString("title", getTitle); 
        fragment.setArguments(bundle); 

       } 
       //return fragment; 
       new MyAdapter(getSupportFragmentManager()).notifyDataSetChanged(); 
      } 
      return fragment; 
     } 

     @Override 
     public int getCount() { 
      // Log.d("info", "get count called"); 
      //numFrag1--; 
      //Log.i("no of method(numFrag1) ", String.valueOf(numFrag1)); 
      new MyAdapter(getSupportFragmentManager()).notifyDataSetChanged(); 
      return 4; 
     } 



     @Override 
     public CharSequence getPageTitle(int position) { 

      if (position == 0){ 

       return "Attendance and Result"; 
      } 

      if (position == 1){ 

       return "College Feeds"; 
      } 

      if (position == 2){ 

       return "Branch Feeds"; 
      } 
      return super.getPageTitle(position); 
     } 



    } 

} 

Fragment.java

実際
public class AttendanceResultFeed extends Fragment { 

    TextView textView, titleText; 
    int number; 
    String text= ""; 

    public AttendanceResultFeed(int position) { 
     Log.i("position", String.valueOf(position)); 
    } 


    public void getNumber (int data){ 

     number = data; 
    } 



    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if(savedInstanceState == null){ 
      // Log.d("info", "in attandec frag on create First time"); 
     }else { 
      // Log.d("info", "in attandec frag on create subsequent time"); 
     } 

    } 

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

     View rootView = inflater.inflate(R.layout.attendance_results_frag,container,false); 

     textView = (TextView) rootView.findViewById(R.id.textView); 
     titleText = (TextView)rootView.findViewById(R.id.titleText); 


     number = getArguments().getInt("number",0); 
     text = getArguments().getString("title"); 
     Log.d("info", String.valueOf(number)); 
     String num = String.valueOf(number); 
     titleText.setText(text); 
     textView.setText(num); 

     return rootView; 
    } 

答えて

0

次の関数に同じタイトルであなたのフラグメントの引数を設定している:あなたはあなたに同じgetTitleを入れて見ることができるように

 for (int i=0; i<4; i++){ 

      if(position == i){ 

       fragment = new AttendanceResultFeed(position); 
       fragment.getTag(); 
       //System.out.println("fragment tag" + fragment.getTag()); 
       //fragment.getNumber(i); 
       Bundle bundle = new Bundle(); 
       bundle.putInt("number", i); 
       bundle.putString("title", getTitle); 
       fragment.setArguments(bundle); 

      } 

フラグメントの引数は実際にはすべてのフラグメントが同じタイトルになります。

私はgetTitleが割り当てられます場所を確認するようにコードをトレースし、代入は、ループのために別に呼ばれtitleName機能であるため、基本的にgetTitleはいつもそれに割り当てられた最後の文字列が含まれています。

私はあなたのコードが動作するように意図されたかどうかはわかりませんが、ここでヒントです:

はあなたのタイトルを保持するためのArrayListを使用します。

//define this as a class member: 
ArrayList<String> getTitle = new ArrayList<String>(); 

//change your titleName: 
public void titleName(String titleData){ 

    getTitle.add(titleData); 
    System.out.println("method title" + titleData); 

} 

//finally where you want to setArgument for your fragments use some logic to retrieve the titles, for example: 
bundle.putString("title", getTitle.get(i)); 
+0

私はあなたのソリューションを試みたが、私は、javaを取得しています。 lang.IndexOutOfBoundsException:無効なインデックス0、サイズが0 –

+0

あなたは私に次に何をすることをお勧めしますか? –

+0

@KrRakesh前に述べたように、私はあなたのプログラムがどのように動作しているのか分かりません。それは単なる提案であり、その要素はgetTitleに何もないので何もないので、あなたの問題について – Pooya

関連する問題