2013-09-03 2 views
0

У меня есть фрагмент Tab1Fragment, который расширяет класс Fragment (поэтому я не могу расширить ListActivity, который требуется для вызова метода setListAdapter). В этом фрагменте я хочу отобразить список, заполненный пользовательскими объектами.Настройка listadapter во фрагменте

Есть ли способ, я могу установить адаптер, не меняя расширенный класс на ListFragment? Проблема заключается в методах setListAdapter (помечены # ЗДЕСЬ).

Вот фрагмент кода:

public class Tab1Fragment extends Fragment { 

    private ArrayList<MobileNETDistinctChatInfo> m_parts = new ArrayList<MobileNETDistinctChatInfo>(); 
    private Runnable viewParts; 
    private MobileNETDistinctChatInfoAdapter m_adapter; 

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

     MobileNETDBHandler db = new MobileNETDBHandler(getActivity()); 

     // instantiate Adapter class 
     m_adapter = new MobileNETDistinctChatInfoAdapter(getActivity(), R.layout.chatlist_list_item, m_parts); 

     setListAdapter(m_adapter); # HERE 

     // Thread, which fetches data in the background 
     viewParts = new Runnable(){ 
     public void run(){ 
      handler.sendEmptyMessage(0); 
     } 
    }; 

    Thread thread = new Thread(null, viewParts, "MagentoBackground"); 
    thread.start(); 
    return (LinearLayout) inflater.inflate(R.layout.tab1, container, false); 
} 


private Handler handler = new Handler() 
{ 
    public void handleMessage(Message msg) 
    { 
     m_parts.add(new MobileNETDistinctChatInfo("[email protected]","Message1", "2013-01-01 11:11:11")); 
     m_parts.add(new MobileNETDistinctChatInfo("[email protected]","Message2", "2013-01-01 11:11:11")); 
     m_parts.add(new MobileNETDistinctChatInfo("[email protected]","Message3", "2013-01-01 11:11:11")); 

     m_adapter = new MobileNETDistinctChatInfoAdapter(getActivity(), R.layout.chatlist_list_item, m_parts); 

     // display the list. 
     setListAdapter(m_adapter); # HERE 
    } 
}; 

} 

Я не могу использовать ListFragment, из-за метода в другой класс, который возвращает вкладки (они называются Tab1Fragment, Ta2Fragment, Tab3Fragment и расширить класс Fragment), который имеет тип Fragment, поэтому я не должен расширять ListFragment.

Метод:

@Override 
public Fragment getItem(int position) { 

    Fragment fragment = new Fragment(); 
    switch (position) { 
     case 0: 
      return fragment = new Tab1Fragment(); 
     case 1: 
      return fragment = new Tab2Fragment(); 
     case 2: 
      return fragment = new Tab3Fragment(); 
     default: 
      break; 
    } 

    return fragment; 
} 
+0

Почему вы не хотите использовать ListFragment? –

+0

@DavidSainty: Я обновил свой вопрос. – TheAptKid

+0

Вы не можете расширить «ListActivity», что является истинным. Но вы можете определенно расширить «ListFragment». – Ercan

ответ

1
  1. Добавить ListView макет tab1.xml и дать идентификатор в этом списке. например: my_list
  2. обновление onCreateView() метод Tab1Fragment быть:

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    
        LinearLayout view = (LinearLayout) inflater.inflate(R.layout.tab1, container, false); 
        ListView list = (ListView)view.findViewById(R.id.my_list); 
    
        MobileNETDBHandler db = new MobileNETDBHandler(getActivity()); 
    
        // instantiate Adapter class 
        m_adapter = new MobileNETDistinctChatInfoAdapter(getActivity(), R.layout.chatlist_list_item, m_parts); 
    
        list.setListAdapter(m_adapter); # HERE 
    
        // Thread, which fetches data in the background  
        viewParts = new Runnable(){ 
         public void run(){ 
          handler.sendEmptyMessage(0); 
         } 
        }; 
    
        Thread thread = new Thread(null, viewParts, "MagentoBackground"); 
        thread.start(); 
        return view; 
    } 
    
0

Используйте как

public class Tab1Fragment extends ListFragment { 

} 
2

Вы должны получить ссылку на объект ListView заселяться.
Имея взглянуть на код, я считаю, что это определено в LinearLayout вы накачивания, так что просто сделать

LinearLayout l = (LinearLayout) inflater.inflate(R.layout.tab1, container, false); 
ListView list = (ListView) l.findViewById(R.id.my_listview_id); 
list.setAdapter(m_adapter); 

можно хранить в виде списка в поле, если вы хотите внести изменения позднее ,

0

Вы можете создать свой собственный класс представления списка, расширив BaseAdapter без изменения какого-либо расширенного класса в android. Вот пример кода для этого:

public class Simple_Fragment extends Fragment 
{ 


    class MyAdapter extends BaseAdapter { 
    // here you adpter methods and impelement what do you want 

     } 

}

0

Вы можете расширить деятельность по ListFragment и это будет работать так же, как ListActivity.

Или вы должны установить список адаптера, как это:

ListView mListView = (ListView)findViewById(R.Id.your_list_view); 

Чтобы установить список адаптер

mListView.setAdapter(YOUR_LIST_ADAPTER); 
Смежные вопросы