현재 ViewPager를 이용하여 Tab에서 서버의 정보를 Json 라이브러리인 Gson을 이용하여 데이터를 가져오고 있습니다.
1번째 탭과, 3번재 탭에서는 각기 다른 서블릿에 접속하여 json 형태로 데이터를 받아오는데, 처음에만 제대로 작동을 하며
탭을 움직이면, 1번재 탭과 3번째 탭이 정보가 반대로 출력되며 1번째 탭에서 3번째 탭으로 이동하면 정보가 출력되지 않고
1번째 탭에서 3번째 탭으로 이동한 다음 2번재 탭을 거쳐 다시 3번재 탭으로 움직여야지만 정보가 출력되는데
이상하게도 1번째 탭의 정보가 출력됩니다. 현재 에러는 발생하지 않습니다.
소스는 다음과 같습니다.
FragmentTab1
public static FragmentTab1 newInstance(int index){
FragmentTab1 f1 = new FragmentTab1();
Bundle args = new Bundle();
args.putInt("index", index);
f1.setArguments(args);
return f1;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fragIndex = getArguments() != null ? getArguments().getInt("index") : 1;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View qrInfoList = inflater.inflate(R.layout.fragmenttab1, container,
false);
projectId = ((MainActivity) getActivity()).projectId;
partId = ((MainActivity) getActivity()).partId;
((TextView) qrInfoList.findViewById(R.id.projectId)).setText(projectId);
((TextView) qrInfoList.findViewById(R.id.partId)).setText(partId);
return qrInfoList;
}
@Override
public void onActivityCreated(Bundle saveInstancesState) {
super.onActivityCreated(saveInstancesState);
new JSONParse().execute(projectId, partId);
}
private class JSONParse extends AsyncTask<String, Integer, String> {
String introJson;
Gson gson = new Gson();
@Override
protected String doInBackground(String... qrInfo) {
String jsonData = postData(qrInfo);
return jsonData;
}
private String postData(String[] qrInfo) {
String url = "xxx.xxx.xxx/Aservlet";
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("qrNum", qrInfo[0]));
nameValuePairs
.add(new BasicNameValuePair("partNum", qrInfo[1]));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs,
"utf-8"));
HttpResponse httpResponse = httpclient.execute(httpPost);
httpPost.setHeader("Content-type", "application/json");
HttpEntity httpEntity = httpResponse.getEntity();
InputStream is = httpEntity.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(is, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
introJson = sb.toString();
is.close();
reader.close();
httpclient.getConnectionManager().closeExpiredConnections();
httpclient.getConnectionManager().shutdown();
} catch (IOException e) {
Log.e("StringBuilding & BufferedReader",
"Error converting result " + e.toString());
}
return introJson;
}
@Override
protected void onPostExecute(String result) {
listView = (ListView) getActivity().findViewById(R.id.listView);
final ArrayList<HashMap<String, Object>> contactList = new ArrayList<HashMap<String, Object>>();
Type type = new TypeToken<List<JsonModel>>() {
}.getType();
List<JsonModel> tryModelList = gson.fromJson(result, type);
Collections.sort(tryModelList, new DateComparator());
for (int i = 0; i < tryModelList.size(); i++) {
HashMap<String, Object> contact = new HashMap<String, Object>();
JsonModel model = tryModelList.get(i);
contact.put("jsonOne", model.getJsonOne());
contact.put("jsonTwo", model.getJsonTwo());
contact.put("jsonThree", model.getJsonThree());
contactList.add(contact);
}
ListAdapter adapter = new SimpleAdapter(getActivity(), contactList,
R.layout.list_item, new String[] { "jsonOne", "jsonTwo",
"jsonThree" }, new int[] { R.id.jsonOne,
R.id.jsonTwo, R.id.jsonThree });
listView.setAdapter(adapter);
}
}
}
FragmentTab3은 FragmentTab1과 서블릿 url만 다릅니다.
TabPagerAdapter
public class TabPagerAdapter extends FragmentStatePagerAdapter {
int num_TabPages = 3;
public TabPagerAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
//Fragement for Movie Tab
return FragmentTab1.newInstance(i);
case 1:
//Fragment for Music Tab
return FragmentTab2.newInstance(i);
case 2:
//Fragment for video Tab
return FragmentTab3.newInstance(i);
}
return null;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return num_TabPages; //No of Tabs
}
}
다른 분들의 도움을 얻어
이 부분을 fragment 객체를 만들어서 [ return new FragmentTab1(); ] 해봤으나 제대로 작동하지 않습니다.
실행 동영상은 네이버까페 남궁성의 코드초보스터디에 올려놨습니다.
http://cafe.naver.com/javachobostudy/123664
도와주시면 감사하겠습니다.