fragment
とviewpager
を使用して簡単なアプリケーションを作成して、webservice
からデータを表示しています。問題はviewpager
は最初に3 fragments
を作成しますが、データは最後のfragment
のみを表示します。これは私のアダプター、 list_nodepがAndroid 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回連続してfragment
onCreateView
実行を見て、そのカーソルがonSuccess
にジャンプするので、ちょうど最後のfragment
がデータを表示した後。私はloadData()
メソッドまたはsetText
を間違った場所に置くと思います。助けてください。
私はここで混乱しています。まず、 'R.id.container'に' Fragment'を追加すると、 'R.id.container'が' ViewPager'であることが判明しました。 –
'ViewPager'でスワイプできますか?私はそれができないと思うので。あなたの 'ViewPager'は' PlaceholderFragment'の下に隠されていますhf –
私はそれをスワイプすることができ、スワイプしている間に次のフラグメントにデータが重大にロードされました – Jacky