2012-05-10 3 views
3

В моем приложении я пытаюсь реализовать вид карты внутри ViewPager. У меня есть 4 разных страницы в приложении. и MapView находится на 4-й странице. Я успешно загрузил карту, но когда я вернусь на первую страницу, четвертое представление должно быть уничтожено с помощью метода destroyItem(). И если я красть на 4-й странице, он выходит из строя из 3-й странице показывает ошибку в LogCat:MapView не удаляется из ViewPager?

05-10 13:14:50.152: E/AndroidRuntime(620): java.lang.IllegalStateException: You are only allowed to have a single MapView in a MapActivity 

Im знают иметь только один MapView в MapActivity. Но я не могу это решить - может кто-нибудь мне помочь?

код ниже:

public Object instantiateItem(View collection, int position) { 

    LayoutInflater inflater = (LayoutInflater) collection.getContext() 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    context = collection.getContext(); 
    int resId = 0; 
    int flag = resId; 
    switch (position) { 
    case 0: 
     resId = R.layout.farleft; // first 
     view = inflater.inflate(resId, null); 

     break; 
    case 1: 
     resId = R.layout.left; // second 
     view = inflater.inflate(resId, null); 

     break; 
    case 2: 
     resId = R.layout.right; // third 
     view = inflater.inflate(resId, null); 

     break; 
    case 3: 
     resId = R.layout.mylocator; 
     view = inflater.inflate(resId, null); 
     break; 

    } 
    ((ViewPager) collection).addView(view, 0); 

    return view; 
} 

@Override 
public void destroyItem(View arg0, int arg1, Object arg2) { 

    ((ViewPager) arg0).removeView((View) arg2); 
    Log.d("destroyItem", "" + arg2); 
} 

ответ

0

Одна проблема с Android Посмотреть пейджера является то, что рециркуляция взгляды должно быть сделано вручную. В вашем случае возможно, что представление еще не было уничтожено, но создается во второй раз, когда представление создается снова. Вы можете сохранить свое представление для каждой страницы, а затем вернуть его в файл instantiateItem, если он еще не был уничтожен.

+1

Может у пожалуйста, помогите мне с некоторый пример кода? –

+0

У меня такая же проблема, и я пробовал это с ответом @Seppl без успеха: HashMap itemList; instantiateItem общественного объекта (ViewGroup контейнер, внутр положение) { \t \t если { \t \t \t возвращение itemList.get (положение) (itemList.get (положение)! = NULL); \t \t} \t \t Объект viewGroup = super.instantiateItem (контейнер, позиция); \t \t \t \t itemList.put (position, viewGroup); \t \t \t \t return viewGroup; \t \t \t} EDIT: Как я могу форматировать код в комментарии? –

1

Я нашел решение. Внутри вашего фрагмента, который содержит карту и который используется в ViewPager, положить, что:

private View myView; 

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

    if (this.myView == null){ 
     this.myView = inflater.inflate(R.layout.my_layout, container, false); 
    } 
    else if (this.myView.getParent() != null) { 
     FrameLayout parentView = (FrameLayout) this.myView.getParent(); 
     parentView.removeView(this.myView); 
    } 

    return this.myView; 

} 

Он отлично работает для меня, скажите мне, если он работает для вас;)

Смежные вопросы