Я создаю приложение видеонаблюдения, у меня есть макет, который позволяет пользователю переключаться с 1,4,9,12 и 16 камер для просмотра в виде сетки с помощью специального адаптера. Что я отслеживал при изменении номера столбца вида сетки с 1 (вид с одной камеры) на 2 (вид с 4 камеры), все виды воссоздаются заново, как этого избежать?
Это мой метод getview.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LinearLayout view = null;
ChannelsItem channelsItem = new ChannelsItem();
if ( null == convertView ) {
if (inflater != null) {
System.out.println("TTT---->>> new");
view = (LinearLayout) inflater.inflate(R.layout.layout_channelspreview_list_item, null);
channelsItem.img = view.findViewById(R.id.img);
channelsItem.textView = (TextView) view.findViewById(R.id.textVideoStat1);
channelsItem.funVideoView = (FunVideoView) view.findViewById(R.id.funVideoView1);
}
} else {
view = (LinearLayout) convertView;
}
view.setTag(position);
return view;
}
Это фрагмент, который я использую для потоковой передачи камер
public void setConfigAndPlay(final int channelCount, final int currentChannel) {
stopMedia();
if (cadapter == null) {
cadapter = new GridCameraChannelsPreviewsAdapter(this, channelCount);
gridview.setAdapter(cadapter);
} else {
cadapter.setChannels(channelCount);
cadapter.notifyDataSetChanged();
}
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
playrealvideo(channelCount, currentChannel);
}
}, 100);
}
public void playrealvideo(int channelCount, final int currentChannel) {
funvideovlist.clear();
textvlist.clear();
for (int i = 0; i < channelCount; i++) {
View v = gridview.findViewWithTag(i);
Log.d("TAG", "playrealvideo: " + v.toString());
if (null != v) {
funVideoView = v.findViewById(R.id.funVideoView1);
textStart = v.findViewById(R.id.textVideoStat1);
img = v.findViewById(R.id.img);
}
funVideoView.setOnErrorListener(this);
funVideoView.setOnInfoListener(this);
funvideovlist.add(funVideoView);
try {
textvlist.set(i, textStart);
} catch (IndexOutOfBoundsException e) {
textvlist.add(textStart);
}
textStart.setText(R.string.media_player_opening);
textStart.setVisibility(View.VISIBLE);
img.setOnClickListener(new MyOnTextStartClickListener(i));
if (mFunDevice.isRemote) {
if (currentChannel != 0) {
funVideoView.setRealDevice(mFunDevice.getDevSn(), currentChannel);
} else {
funVideoView.setRealDevice(mFunDevice.getDevSn(), i);
}
} else {
String deviceIp = FunSupport.getInstance().getDeviceWifiManager().getGatewayIp();
funVideoView.setRealDevice(deviceIp, i);
}
}
}
И так я меняю размер столбца
gridview.setNumColumns(2);
setConfigAndPlay(4, 0);
Делая что-то подобное впервые, что было бы лучшим решением для такой проблемы?