2013-01-22 68 views
0

我需要從loadListTask填充listview。你會在腳本結尾看到它應該發生的地方。怎麼做 ? 我嘗試了幾種方法,但總是碰到同樣的結果。從異步任務填充片段列表視圖

主要在這裏活動,並在年底的異步任務:

public class MainActivity extends FragmentActivity { 
SectionsPagerAdapter mSectionsPagerAdapter; 
ViewPager mViewPager; 


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

    LoadListTask myLoadListTask = new LoadListTask(); 
    myLoadListTask.execute(); 


    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 
    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Fragment fragment = new SectionFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(SectionFragment.ARG_SECTION_NUMBER, position + 1); 
     fragment.setArguments(args); 
     return fragment; 
    } 

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

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
     case 0: 
      return getString(R.string.title_section1).toUpperCase(); 
     case 1: 
      return getString(R.string.title_section2).toUpperCase(); 
     case 2: 
      return getString(R.string.title_section3).toUpperCase(); 
     } 
     return null; 
    } 
} 

public static class SectionFragment extends Fragment { 
    /** 
    * The fragment argument representing the section number for this 
    * fragment. 
    */ 
    public static final String ARG_SECTION_NUMBER = "section_number"; 

    public SectionFragment() { 
    } 

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

     ArrayList<HashMap<String, String>> listItem; 
     HashMap<String, String> map; 
     SimpleAdapter mSchedule; 
     listItem = new ArrayList<HashMap<String, String>>(); 
     map = new HashMap<String, String>(); 
     ListView maListViewPerso = new ListView(getActivity()); 

     mSchedule = new SimpleAdapter (getActivity(), listItem, R.layout.affichageitem, 
       new String[] {"img", "titre", "description"}, new int[] {R.id.img, R.id.titre, R.id.description}); 
     maListViewPerso.setAdapter(mSchedule); 




     switch (getArguments().getInt(
       ARG_SECTION_NUMBER)) { 
     case 1: 

      map = new HashMap<String, String>(); 
      map.put("titre", "Excel"); 
      map.put("description", Integer.toString(getArguments().getInt(
        ARG_SECTION_NUMBER))); 
      map.put("img", String.valueOf(R.drawable.devoir)); 
      listItem.add(map); 

     case 2: 
      //To do 
     case 3: 
      //To do 
     } 

     return maListViewPerso; 
    } 
} 


// I NEED TO POPULATE FROM HERE 
private class LoadListTask extends AsyncTask<String, Void, Integer> { 
    protected void onPreExecute() { 
    } 

    protected Integer doInBackground(String... params) { 
     return 0; 
    } 

    protected void onPostExecute(Integer result) { 
     if (result == 0) { 
     } 
    } 
} 
} 
+0

什麼是logcat崩潰時說的? – codeMagic

+0

只需將'SectionFragment'的引用傳遞給'LoadListTask',然後在'onPostExecute()'上創建並設置適配器。 @codeMagic:在logcat中沒有什麼可以看到的,因爲他仍然不知道如何去做。 – m0skit0

+0

我知道他現在沒有任何東西,但聽起來他嘗試了一些東西,並且它墜毀了,所以我認爲他可能有東西接近但是拿出來了。 – codeMagic

回答

0

你必須參考保持到的listItem和maListViewPerso在onPostExecute使用它們,您可以通過聲明爲成員做你類。

這樣做後,你必須創建你的適配器。 (adapter)對於簡單的數據結構,您可以使用Android的預定義之一,例如ArrayAdapterSimpleCursorAdapter,但我想你要做的是創建一個列表,它遍歷ArrayList,然後進入地圖的項目。要做到這一點,你必須實現自己的適配器,擴展BaseAdapter。實施getView(int pos)你必須返回位置posgetCount()的項目ListView會知道你的列表有多少項目。

+0

事實上,他只需要一個引用列表的適配器 – m0skit0

+0

我添加了這兩個引用,現在它的作用就像一個魅力。謝謝Terendul!(以及所有其他加入此線程的人) –