У меня есть следующая проблема. У меня есть 3 вида объектов:Вложенный список в Android с ArrayAdapter и разными объектными типами
Устройства, Каталоги, Песни
Сейчас я только показывая свои устройства с ArrayAdapter<DeviceDisplay>
Как я могу отобразить все 3 типа в одном списке?
Также я хотел бы показывать только каталоги данного устройства, когда я нажимаю на него в списке, и только песни каталога при нажатии.
Также я использую все внутри фрагмента.
Это как-то достижимо?
код в моем фрагменте:
public class MusicListFragment extends ListFragment {
ArrayAdapter<DeviceDisplay> mediaServerAdapter;
ArrayList<Device> mediaServers = new ArrayList<Device>();
ArrayList<Container> containers = new ArrayList<Container>();
ArrayList<Item> items = new ArrayList<Item>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.music_list, container, false);
getMediaServers();
mediaServerAdapter = new ArrayAdapter<DeviceDisplay>(this.getActivity(), android.R.layout.simple_list_item_1);
setListAdapter(mediaServerAdapter);
addDevicesToAdapter();
return rootView;
}
public void getMediaServers(){
Activity a = getActivity();
ArrayList<Device> devices = ((MainActivity) a).getDevices();
for (int i = 0; i < devices.size(); i++) {
Device device = devices.get(i);
if(device.getType().getType().equals("MediaServer")){
if (!mediaServers.contains(device)) {
mediaServers.add(device);
}
}
}
}
public void addDevicesToAdapter(){
for (int i = 0; i < mediaServers.size() ; i++) {
mediaServerAdapter.add(new DeviceDisplay(mediaServers.get(i)));
listContent(mediaServers.get(i));
}
}
public void listContent(Device device){
System.out.println(device.getDisplayString());
Service service = device.findService(new UDAServiceId("ContentDirectory"));
ActionCallback browse = new Browse(service, "0", BrowseFlag.DIRECT_CHILDREN) {
@Override
public void received(ActionInvocation actionInvocation, DIDLContent didl) {
//Containers and songs come here.
}
@Override
public void updateStatus(Status status) {
}
@Override
public void failure(ActionInvocation invocation,
UpnpResponse operation,
String defaultMsg) {
}
};
((MainActivity) getActivity()).upnpService.getControlPoint().execute(browse);
}
}