2017-06-20 117 views
0

我有一个由外部API支持的ViewPager。每个页面都有三个按钮。当点击这些按钮时,应用程序崩溃。我的适配器如下。如何处理Android中的ViewPager中的多个按钮点击?

public class ViewPagerAdapter extends PagerAdapter{ 

    private Activity activity; 
    private LayoutInflater inflater; 
    private List<NewsModel> newsItems; 
    Context context; 
    View itemView; 
    public ViewPagerAdapter(Activity activity, List<NewsModel> newsItems){ 
    this.activity = activity; 
    this.newsItems = newsItems; 
} 

@Override 
public int getCount() { 
    return newsItems.size(); 
} 

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

@Override 
public Object instantiateItem(ViewGroup container, int position){ 

    TextView mAuthor; 
    NetworkImageView networkImageView; 
    ImageButton fav, sha, mor; 

     inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     itemView = inflater.inflate(R.layout.pager_item, container, false); 
     imageLoader = AppController.getInstance().getImageLoader(); 

    mAuthor = (TextView) itemView.findViewById(R.id.nwAuthor); 
    fav = (ImageButton) itemView.findViewById(R.id.fav); 
    sha = (ImageButton) itemView.findViewById(R.id.sha); 
    mor = (ImageButton)itemView.findViewById(R.id.mor); 
    networkImageView = (NetworkImageView) itemView.findViewById(R.id.nwImage); 

    fav.setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View v) { 

      View parentRow = (View) v.getParent(); 
      ViewPager vp = (ViewPager) parentRow.getParent(); 
      final int position = vp.getCurrentItem(); 


    }); 

    networkImageView.setImageUrl(newsItems.get(position).getUrlToImageNews(), imageLoader); 
    mAuthor.setText(newsItems.get(position).getAuthor()); 
    Log.d("Aseem Savio",newsItems.get(position).getAuthor()); 

    mTitle.setText(newsItems.get(position).getTitleNews()); 
    mDesc.setText(newsItems.get(position).getDescription()); 
    mTime.setText(newsItems.get(position).getPublishedAt()); 

    container.addView(itemView); 

    return itemView; 
} 

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    // Remove viewpager_item.xml from ViewPager 
    ((ViewPager) container).removeView((LinearLayout) object); 
}} 

以下是错误日志。

FATAL EXCEPTION: main Process: com.aseemsavio.picks, PID: 11298 java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.support.v4.view.ViewPager at com.aseemsavio.picks.ViewPagerAdapter$2.onClick(ViewPagerAdapter.java:123) at android.view.View.performClick(View.java:5610) at android.view.View$PerformClick.run(View.java:22260) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

整体上,我怎么执行鉴于寻呼机多个按钮的点击?请解释我们如何获得视图寻呼机中项目的位置。另外,解释如何纠正上述错误。提前致谢。

回答

1

您发布适配器〜70行的代码,但在123 com.aseemsavio.picks.ViewPagerAdapter $ 2.onClick(ViewPagerAdapter.java:123)

看起来像问题上的错误是在这里:

ViewPager vp = (ViewPager) parentRow.getParent(); 

因为:

java.lang.ClassCastException:android.widget.LinearLayout不能 投地android.support.v4.view.ViewPager

这意味着你的parentRow.getParent(); retirns的LinearLayout

实例

尝试: 中的onClick:

iewPager vp = (ViewPager) findViewPagerParent(v); 
if(vp != null) { 
    //do your stuff 
} 

add方法

private View findViewPagerParent(View childView) { 
    if (childView == null) { 
      return null; 
    } 
    if (childView instanceof ViewPager) { 
     return childView; 
    } else { 
     return findViewPagerParent((View) childView.getParent()); 
    } 
} 
+0

感谢您指出错误所在!我该如何使ClassCastException正确?我尝试了很多方法。请帮忙! –

+0

'parentRow'的父代是LinearLayout,你不能将代数转换为ViewPager – X3Btel