2016-03-25 5 views
1

fragmentviewpagerを使用して簡単なアプリケーションを作成して、webserviceからデータを表示しています。問題はviewpagerは最初に3 fragmentsを作成しますが、データは最後のfragmentのみを表示します。これは私のアダプター、 list_nodepAndroid viewpagerは最後のフラグメントビューのデータを表示するだけです

public class LineDetailTabs extends FragmentActivity { 
//declare some variables here 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_line_detail_tabs); 

    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager 
      .beginTransaction(); 
    PlaceholderFragment hf = new PlaceholderFragment(); 
    fragmentTransaction.replace(R.id.container, hf); 
    fragmentTransaction.commit(); 

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.container); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 
    mViewPager.setCurrentItem(index); 
    } 

文字列配列は、多くのdeparmentsのIDが含まれている:

は、ここに私の活動です。 件数は部門数であり、タブ数も作成されます。

public class SectionsPagerAdapter extends FragmentStatePagerAdapter { 
    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     noDep = list_nodep[position]; 

     PlaceholderFragment fragment = new PlaceholderFragment(); 
     Bundle args = new Bundle(); 
     //put some agurments 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return count; 
    } 
} 

ここで私のフラグメントは、すべてのフラグメントに対して同じレイアウトxmlファイルです。

public static class PlaceholderFragment extends Fragment { 
    public static View rootView; 

    public static TextView tvHeader; 
    public static TextView tvPO; 
    public static TextView tvLot; 
    // many textviews 

    public PlaceholderFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
     activity = (LineDetailTabs) getActivity(); 
     loadData(noDep, date, username, dbIP, dbName, dbUsername, dbPassword); 

     rootView = inflater.inflate(R.layout.fragment_line_detail_tabs, container, false); 
     tvHeader = (TextView) rootView.findViewById(R.id.txtHeader); 
     tvPO = (TextView) rootView.findViewById(R.id.txtPO); 
     tvLot = (TextView) rootView.findViewById(R.id.txtLOT); 
     // many textviews remaining... 

     return rootView; 
    } 

public static void loadData(String aNoDep, String aDate, String aUsername, String aDbIP, String aDbName, String aDbUser, String aDbPass) { 
      RequestParams params = new RequestParams(); 
      //put params 

      invokeWS(params); 
    } 

public static void invokeWS(final RequestParams params) { 

       AsyncHttpClient client = new AsyncHttpClient(); 
       client.get("http://...", params, new AsyncHttpResponseHandler() { 
         @Override 
         public void onSuccess(int statusCode, Header[] headers, String response) { 
         try { 
          // JSON Object 
          JSONObject obj = new JSONObject(response); 
          // When the JSON response has status boolean value assigned with true 

          JSONArray jArr = obj.getJSONArray("list"); 

          // Display info detail on screen 
          obj = jArr.getJSONObject(0); 

          tvHeader.setText = obj.getString("NAME_DEP"); 
          tvPO.setText = obj.getString("NO_PO"); 
          tvLot.setText = obj.getString("NO_LOT"); 
          //set text for all textviews 
        } 
        // When the response returned by REST has Http response code other than '200' 
        @Override 
        public void onFailure(int statusCode, Throwable error, 
              String content) { 
         // When Http response code is '404' 
         if (statusCode == 404) { 
          Toast.makeText(activity.getApplicationContext(), Constants.ERR_CODE_404, Toast.LENGTH_SHORT).show(); 
         } 
         // When Http response code is '500' 
         else if (statusCode == 500) { 
          Toast.makeText(activity.getApplicationContext(), Constants.ERR_CODE_500, Toast.LENGTH_SHORT).show(); 
         } 
         // When Http response code other than 404, 500 
         else { 
          Toast.makeText(activity.getApplicationContext(), Constants.ERR_CODE_, Toast.LENGTH_SHORT).show(); 
         } 
        } 
       }); 
     } 
    } 

私のアプリをデバッグするとき、私は3回連続してfragmentonCreateView実行を見て、そのカーソルがonSuccessにジャンプするので、ちょうど最後のfragmentがデータを表示した後。私はloadData()メソッドまたはsetTextを間違った場所に置くと思います。助けてください。

+0

私はここで混乱しています。まず、 'R.id.container'に' Fragment'を追加すると、 'R.id.container'が' ViewPager'であることが判明しました。 –

+0

'ViewPager'でスワイプできますか?私はそれができないと思うので。あなたの 'ViewPager'は' PlaceholderFragment'の下に隠されていますhf –

+0

私はそれをスワイプすることができ、スワイプしている間に次のフラグメントにデータが重大にロードされました – Jacky

答えて

0

OK、ついにそれを修正しました。それは私の間違いです、私は活動から断片へのパラメタを渡しませんでした。 はジャスト)onCreateView(これらの引数を取得後、ここ

 @Override 
     public Fragment getItem(int position) { 
      // getItem is called to instantiate the fragment for the given page. 
      // Return a PlaceholderFragment (defined as a static inner class below). 
      noDep = list_nodep[position]; 
      Bundle bundle = new Bundle(); 
      bundle.putString("NO_DEP", noDep); 
      bundle.putString("DATE", date); 
      bundle.putString("USERNAME", username); 
      bundle.putString("DB_IP", dbIP); 
      bundle.putString("DB_NAME", dbName); 
      bundle.putString("DB_USER", dbUsername); 
      bundle.putString("DB_PASS", dbPassword); 
      bundle.putString("SERVER_IP", serverIP); 

      PlaceholderFragment fragment = new PlaceholderFragment(); 
      fragment.setArguments(bundle); 
      return fragment; 
     } 

のparamsを入れて、loaddataの()メソッドを呼び出します。

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_line_detail_tabs, container, false); 

     activity = (LineDetailTabs) getActivity(); 

     noDep = getArguments().getString("NO_DEP"); 
     date = getArguments().getString("DATE"); 
     username = getArguments().getString("USERNAME"); 
     dbIP = getArguments().getString("DB_IP"); 
     dbName = getArguments().getString("DB_NAME"); 
     dbUsername = getArguments().getString("DB_USER"); 
     dbPassword = getArguments().getString("DB_PASS"); 
     serverIP = getArguments().getString("SERVER_IP"); 

     loadData(noDep, date, username, dbIP, dbName, dbUsername, dbPassword); 

     tvHeader = (TextView) rootView.findViewById(R.id.txtHeader); 
     tvPO = (TextView) rootView.findViewById(R.id.txtPO); 
     //... 

     return rootView; 
    }