无法更新视图寻呼机左侧和右侧的视图

时间:2016-01-30 08:16:48

标签: android android-viewpager radio-button android-imageview

我使用viewpager显示带有图片的视图,并在下面显示radiobutton。每个滑动屏幕都不是fragment,它们是仅使用不同imageview滑动同一视图的布局。问题是,在我选择当前屏幕的单选按钮后,我无法取消选择当前视图左侧和右侧的单选按钮。如果我在POSITION_NONE中返回getItemPosition(),则会刷新屏幕并取消选中单选按钮,但视图会闪烁。如果我能够致电instantiateItem(),我的问题就解决了。但只有在基于setOffsetScreenPageLimit()销毁视图时才会调用此方法。如果查看寻呼机无法帮助我怎样才能达到这样的要求?

片段:

public class AnswerImageDialogFragment extends DialogFragment implements ViewPager.OnPageChangeListener {
//member declaration

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    String strQuestion = null;

    View rootView = inflater.inflate(R.layout.activity_viewpager_demo, container,
        false);
    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    intro_images = (ViewPager) rootView.findViewById(R.id.pager_introduction);
    pager_indicator = (LinearLayout) rootView.findViewById(R.id.viewPagerCountDots);

   //do some stuff


    //set the adapter
    mAdapter = new ViewPagerAdapter(getContext(), map);
    intro_images.setAdapter(mAdapter);
    intro_images.setCurrentItem(clickPosition);
    intro_images.setOnPageChangeListener(this);
    setUiPageViewController();

    bus = EventBus.getDefault();
    bus.register(this);
    return rootView;
}
//other method
}

PagerAdapter:

public class ViewPagerAdapter extends PagerAdapter {
// member declaration
public ViewPagerAdapter(Context mContext, HashMap<String, Object> map) {
//other initialization
}
@Override
public int getCount() {
    return optionImages.size();
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return view == ((LinearLayout) object);
}

@Override
public Object instantiateItem(ViewGroup container, final int position) {
    View itemView = LayoutInflater.from(mContext).inflate(R.layout.pager_item, container, false);


    final ImageView ivOption = (ImageView) itemView.findViewById(R.id.answerId); // this is used as radio button in this case

    /*The code snippet is to select the answer option based on whether answer is choosen or not.
      If choosen, select as default in the pop up answer.
    */
    if (null != ans) {
        Iterator iterator = ans.iterator();
        if (ans.size() > 0) {
            int value = (int) iterator.next();
            if (value == position) {
                ivOption.setImageResource(R.drawable.ic_radio_button_tick);
            } else {
                ivOption.setImageResource(R.drawable.ic_radio_button_nontick);
            }
        }
    }
    p = position;

    /*The code snippet is to change the answer value based on the user selection.
      This means if user choosen another answer then clear the earlier choosen answer
    */
    ivOption.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //do stuff
        }
    });

    txtQuestion.setText(question);
    txtOption.setText(optionsList.get(position));

    imageView.setParseFile(optionImages.get(position));
    imageView.loadInBackground();
    container.addView(itemView);
    return itemView;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    LinearLayout ll = (LinearLayout) object;
    /*RelativeLayout ivOption = (RelativeLayout) ll.getChildAt(2);
    ImageView iv = (ImageView) ivOption.getChildAt(1);
    iv.setImageResource(R.drawable.ic_radio_button_tick);*/
    container.removeView(ll);
}
@Override
public int getItemPosition(Object object) {
    return super.getItemPosition(object);
}

public void refresh(ArrayList object) {
    this.object = new ArrayList();
    this.object.addAll(object);
    this.notifyDataSetChanged();
}

0 个答案:

没有答案