누군가가 도와 줄 수 있기를 바랍니다. 지원 라이브러리를 사용하여 여러 목록 조각을 호스팅하는 조각이 있습니다. 목록 조각은 부모 조각에서 비동기 작업을 검색하는 데이터를 표시합니다. 올바르게로드되지 않기 때문에 데이터를로드하는 방법을 정확하게 파악하려고했습니다.ListFragments 잘못된 데이터 이상한 호출기
목록 디스플레이 조각이 출시 될 때마다 얻을 수 및 각 목록 조각이 ArrayList의에서의 위치에서 데이터에 대한 부모 조각을 조회 ArrayList <ArrayList <HashMap <String, String> > >
으로 JSON을 구문 분석하는 비동기 작업을 예비 적. 예. 3 페이지 째에는 목록으로 표시 할 ArrayList가 포함 된 arrList [2]를 검색해야합니다.
호출기가 이상하게 작동합니다. 어쩌면 내가 파편의 수명주기 또는 호출기가 어떻게 사용하는지 이해하지 못할 수도 있습니다. 나는 7 개의 단편을 가지고있다. 만약 내가 frag3에서 시작하면 호출기는 데이터가없는 조각 3을 보여줄 것입니다. 또한 데이터없이 조각 2와 4를로드합니다. 만약 내가 frag 1로 가면 조각 1을 정확하게 표시하고 조각 0을로드 할 것입니다. 나는 frag 0으로 바꿀 수 있지만 frag 2로 전환하면 frag 0에서 데이터를로드하고 frag 0의 데이터를 나머지 모든 조회수. 내가 앞뒤로 충분히 가면 모든 조각의 모든 데이터를 frag 0의 데이터로 대체 할 것입니다. 뷰 페이지가 시작될 때 데이터가 없으므로 데이터를 즉시로드하지 않는다고 생각합니다. 아직 비동기 작업을 기다리지 않았습니다.
필자는 각 조각이 뷰에서 충분히 멀리 떨어질 때마다 뷰가 다시 그려지는 것으로 생각했습니다. 그래서 나는 조각을 onCreateView()
에 넣습니다. 나는 이것이 방금 잘못 놓은 작은 일이거나 그것을 간과하고있는 것처럼 느낍니다. 나는 FragmentStatePagerAdapter
을 구현하려고했지만 그게 옳다고 생각하지 않습니다.
도움이 많이 감사합니다. 그리고 내가 끔찍한 일을 잘못하고 있다면 매우 열렬히 토론합니다. 나는 보통한다. 결코 실패하지 않습니다. 뭔가를 작성하여 모든 것을 다시 작성해야합니다.
public class ListFragmentDisplay extends SherlockFragment {
public static final String TAG = "listFragmentDisplay";
Calendar calendar = Calendar.getInstance();
private int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
// listbyday is a list of hash maps each list of hash maps represents a day
// of the week with items for that Object
private ArrayList<ArrayList<HashMap<String, String>>> listByDay = null;
private String objectName = null;
private ViewPager pager;
private FragAdapter adapter;
public ArrayList<HashMap<String, String>> getList(int day) {
return listByDay.get(day);
}
private void getObjectName() {
barName = ((MainFragActivity) getActivity()).getobjectSelected();
}
public static ListFragmentDisplay newInstance() {
return new ListFragmentDisplay();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the ListView layout file.
initArrList();
getObjectName();
fillList();
return inflater.inflate(R.layout.list_view, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
pager = (ViewPager) view.findViewById(R.id.viewPager);
adapter =new FragAdapter(getChildFragmentManager());
if (pager.getAdapter() == null)
pager.setAdapter(adapter);
reload();
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageScrollStateChanged(int arg0) {}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {reload();}
@Override
public void onPageSelected(int arg0) {
}
});
pager.setCurrentItem(dayOfWeek-1);
}
private void initArrList() {
if (listByDay == null) {
listByDay = new ArrayList<ArrayList<HashMap<String, String>>>();
} else {
listByDay.clear();
}
for (int i = 0; i < 7; i++) {
ArrayList<HashMap<String, String>> hm = new ArrayList<HashMap<String, String>>();
listByDay.add(hm);
}
}
synchronized private void fillList() {
LoadWebTask lWT = new LoadWebTask();
executeAsyncTask(lWT, getSherlockActivity().getApplicationContext());
}
FragmentPager
public class FragAdapter extends FragmentPagerAdapter {
private static final String[] CONTENT = new String[] { "frag0", "frag1",
"frag2", "frag3", "frag4", "frag5", "frag6" };
public FragAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int arg0) {
return MyListFragment.newInstance(arg0);
}
@Override
public int getCount() {
return CONTENT.length;
}
@Override
public CharSequence getPageTitle(int position) {
return CONTENT[position % CONTENT.length];
}
}
ListFragment
public class MyListFragment extends SherlockListFragment {
public static final String NAME_TAG = "name";
public static final String DESCRIPTION_TAG = "description";
private static int dow;
public static final String TAG = "listFragment";
// Keys used in Hashmap that will be mapped to the rows
String[] dFrom = { NAME_TAG, DESCRIPTION_TAG };
private ArrayList<HashMap<String, String>> list;
int[] dTo = { R.id.name, R.id.description };
public void upDateList() {
//**************************Not really sure if this is how things are supposed
//** to be done. For my small data- set i feel like it will work but i would
//** be interested in knowing how else this might be done.
ListFragmentDisplay lFD = (ListFragmentDisplay) this
.getParentFragment();
dList = lFD.getList(dow);
}
public static MyListFragment newInstance(int pos) {
MyListFragment frag = new MyListFragment();
dow = pos;
return (frag);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
upDateList();
View results = inflater.inflate(R.layout.list_fragment, container,
false);
SimpleAdapter adapter = new SimpleAdapter(getParentFragment()
.getActivity(), list, R.layout.listrow, dFrom, dTo);
setListAdapter(adapter);
return results;
}
}
편집. 해결 된 코드 : 목록 조각 초기 질문이 해결되었습니다. 나는 ListFragmentDisplay에 onPostExecute 콜백을 구현하는 과정에만있다. 아주 멍청한 실수를 해결해 준 Luksprog에게 감사드립니다. 나는 그것의 영향을 알지 못하고 정적을 만들었다. 실제로 이클립스가 충돌을 해결하기 위해 제공 한 것이라고 생각합니다. 나는 그것을 더 가깝게 읽어야했다.
public class MyListFragment extends SherlockListFragment {
public static final String NAME_TAG = "name";
public static final String DESCRIPTION_TAG = "description";
public static final String TAG = "listFragment";
// Keys used in Hashmap that will be mapped to the rows
String[] dFrom = { NAME_TAG, DESCRIPTION_TAG };
private ArrayList<HashMap<String, String>> list;
int[] dTo = { R.id.name, R.id.description };
SimpleAdapter adapter = null; **NEW**
public void upDateList() {
ListFragmentDisplay lFD = (ListFragmentDisplay) this
.getParentFragment();
dList = lFD.getList(getArguments().getInt(TAG)); **NEW**
if(adapter != null) **NEW**
adapter.notifyDataSetChanged(); **NEW**
}
public static MyListFragment newInstance(int pos) {
MyListFragment frag = new MyListFragment();
Bundle args = new Bundle(); **NEW**
args.putInt(TAG, pos); **NEW**
frag.setArguments(args); **NEW**
return (frag);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
upDateList();
View results = inflater.inflate(R.layout.list_fragment, container,
false);
adapter = new SimpleAdapter(getParentFragment()
.getActivity(), list, R.layout.listrow, dFrom, dTo);
setListAdapter(adapter);
return results;
}
}
[이 PagerAdapter] (http://stackoverflow.com/questions/9417808/updating-fragments-in-a-viewpager)와 같은 페이징 어댑터의 각 조각을 추적해야합니까? – doubleA
나는 아무도 읽으려고하지 않거나 어리석은 질문을하고 있다고 가정 할 수 있습니다. :) – doubleA