В моем приложении я пытаюсь открыть файл Excel и создать одну вкладку на строку данных.Открытие файла и получение данных работает нормально, но если я пытаюсь добавить страницы, я получаю следующее исключение:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: dsv.testanwendung, PID: 19699
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
Я уже пытался добавить представление только в instantiateItem, если в настоящее время нет родителя, но затем, каким-то образом, представление сразу удаляется, когда я пролистываю на его страницу.
Итак, это мой класс PagerAdapter:
package dsv.testanwendung;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
public class PagerAdapterContent extends PagerAdapter {
private ArrayList<View> views = new ArrayList<View>();
@Override
public int getItemPosition(@NonNull Object object) {
int index = views.indexOf(object);
if (index == -1) {
return POSITION_NONE;
} else {
return index;
}
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
View v = views.get(position);
container.addView(v);
return v;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(views.get(position));
}
@Override
public int getCount() {
return views.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
public int addView(View v) {
return addView(v, views.size());
}
public int addView(View v, int position) {
views.add(position, v);
notifyDataSetChanged();
return position;
}
public int removeView(ViewPager pager, View v) {
return removeView(pager, views.indexOf(v));
}
public int removeView(ViewPager pager, int position) {
pager.setAdapter(null);
views.remove(position);
pager.setAdapter(this);
return position;
}
public View getView(int position) {
return views.get(position);
}
}
А вот как я пытаюсь добавить материал черезмоя основная деятельность:
viewpageContent = findViewById(R.id.vpContent);
adapterContent = new PagerAdapterContent();
vpContent.setAdapter(adapterContent);
LayoutInflater inflater = getLayoutInflater();
FrameLayout fl = (FrameLayout)inflater.inflate(R.layout.fragment_content, null, false);
while (rowIterator.hasNext()) {
HSSFRow row = (HSSFRow)rowIterator.next();
((InputUserDefined)f).addButton(row.getCell(0).toString());
int pageIndex = adapterContent.addView(fl);
}