0

Fragment クラスを拡張するフラグメント Tab1Fragment があります (したがって、setListAdapter メソッドを呼び出すために必要な ListActivity を拡張することはできません)。このフラグメントでは、カスタム オブジェクトが取り込まれたリストビューを表示したいと考えています。

拡張クラスを ListFragment に変更せずにアダプターを設定する方法はありますか? 問題は setListAdapter メソッドにあります (# HERE でマークされています)。

フラグメントコードは次のとおりです。

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("someone@gmail.com","Message1", "2013-01-01 11:11:11"));
        m_parts.add(new MobileNETDistinctChatInfo("someonelse@gmail.com","Message2", "2013-01-01 11:11:11"));
        m_parts.add(new MobileNETDistinctChatInfo("someonelselse@gmail.com","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
    }
};

}

Fragment 型のタブ (Tab1Fragment、Ta2Fragment、Tab3Fragment という名前で、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;
}
4

5 に答える 5

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);

後で変更したい場合は、リスト ビューをフィールドに保存できます。

于 2013-09-03T08:15:02.227 に答える
0

アクティビティを に拡張できます。ListFragmentこれは と同じように機能しListActivityます。

または、次のようにリスト アダプターを設定する必要があります。

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

リストアダプタを設定するには

mListView.setAdapter(YOUR_LIST_ADAPTER);
于 2013-09-03T08:20:46.733 に答える
0

Android の拡張クラスを変更せずに BaseAdapter を拡張することで、カスタム リスト ビュー クラスを作成できます。これのサンプルコードは次のとおりです。

public class Simple_Fragment extends Fragment 
{


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

        }

}

于 2013-09-03T08:16:58.747 に答える
0

のように使う

public class Tab1Fragment extends ListFragment {

}
于 2013-09-03T08:10:23.030 に答える