Recyclerview

时间:2018-03-24 09:17:57

标签: java android firebase

我是android开发新手。 创建了recyclelerview,其中列出了活动项目,实现了可点击项目,因此当我点击项目时,它会启动新活动,其中将显示项目的详细信息。

问题是有时(并非总是),当我点击recyclerview中的第一个或最后一个项目时(通常是第一个和最后一个,因为其他项目点击工作正常)它会崩溃应用程序,并且不会移动到另一个活动。帮助我,因为我不知道为什么会这样。

适配器或回收者视图:

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder>  {
private List<Ads> ads=new ArrayList<>();
private Context mContext;
DataAdapter(Context context, List<Ads> ads) {
    this.mContext=context;
    this.ads = ads;
}
@Override
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
    ViewHolder mView = new ViewHolder(view);
    return mView;
}
@Override
public void onBindViewHolder(DataAdapter.ViewHolder holder, @SuppressLint("RecyclerView") final int position) {
     Ads ad = ads.get(position);
    Picasso.get().load(ad.GetImage1()).fit().into(holder.imageView);
    holder.nameView.setText(ad.GetName());
    holder.priceView.setText(ad.GetPrice());
    holder.parentLayout.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(view.getContext(), AdInfo.class);
            intent.putExtra("pos",position);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            view.getContext().startActivity(intent);
        }

    });

}
@Override
public long getItemId(int position) {
    return position;
}
@Override
public int getItemViewType(int position) {
    return position;
}
@Override
public int getItemCount() {
    return ads.size();
}

public class ViewHolder extends RecyclerView.ViewHolder  {
    final ImageView imageView;
    final TextView nameView, priceView;
    RelativeLayout parentLayout;
    ViewHolder(View view){
        super(view);
        imageView = (ImageView)view.findViewById(R.id.image);
        nameView = (TextView) view.findViewById(R.id.name);
        priceView = (TextView) view.findViewById(R.id.price);
        parentLayout = itemView.findViewById(R.id.parent_layout);
    }
}

填写列表的活动:

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_client_activity);
    allAds=new ArrayList<>();Init();
    view=(RecyclerView)findViewById(R.id.recyclerView);
    adapter=new DataAdapter(this,allAds);
    view.setAdapter(adapter);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           Intent intent=new Intent(client_activity.this,create.class);
           startActivity(intent);
           finish();
        }
    });

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
    SharedPreferences pref = getSharedPreferences("session", MODE_PRIVATE);
    nameShow=(TextView)navigationView.getHeaderView(0).findViewById(R.id.textView2);
    nameShow.setText(pref.getString("name",null));
    phoneShow=(TextView)navigationView.getHeaderView(0).findViewById(R.id.textView);
    phoneShow.setText(pref.getString("phone",null));

}

private void Init()
{
    DatabaseReference ads= FirebaseDatabase.getInstance().getReference();
    ads.child("Ads").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            allAds.clear();adapter.notifyDataSetChanged();
          for(DataSnapshot shot:dataSnapshot.getChildren())
          {
              Ads ad=new Ads();
              ad.SetImage1(shot.child("image1").getValue(String.class));
              ad.SetImage2(shot.child("image2").getValue(String.class));
              ad.SetImage3(shot.child("image3").getValue(String.class));
              ad.SetCity(shot.child("city").getValue(String.class));
              ad.SetInfo(shot.child("info").getValue(String.class));
              ad.SetCategory(shot.child("category").getValue(String.class));
              ad.SetName(shot.child("name").getValue(String.class));
              ad.SetPhone(shot.child("phone").getValue(String.class));
              ad.SetPrice(shot.child("price").getValue(String.class));
              ad.SetId(shot.child("id").getValue(String.class));
              ad.SetUid(shot.child("uid").getValue(String.class));
              ad.SetAuthorName(shot.child("authorName").getValue(String.class));
              allAds.add(ad);
          }

            findViewById(R.id.loadingPanel).setVisibility(View.GONE);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

}

我的日志

03-24 15:42:00.597 14361-14361/com.example.madik.sogim E/AndroidRuntime: FATAL EXCEPTION: main
                                                                     Process: com.example.madik.sogim, PID: 14361
                                                                     java.lang.IndexOutOfBoundsException: Invalid index 3, size is 0
                                                                         at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
                                                                         at java.util.ArrayList.get(ArrayList.java:308)
                                                                         at com.example.madik.sogim.ImageAdapter.instantiateItem(ImageAdapter.java:43)
                                                                         at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1002)
                                                                         at android.support.v4.view.ViewPager.populate(ViewPager.java:1150)
                                                                         at android.support.v4.view.ViewPager.populate(ViewPager.java:1084)
                                                                         at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1614)
                                                                         at android.view.View.measure(View.java:18850)
                                                                         at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:716)
                                                                         at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:462)
                                                                         at android.view.View.measure(View.java:18850)
                                                                         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5963)
                                                                         at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                                         at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
                                                                         at android.view.View.measure(View.java:18850)
                                                                         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5963)
                                                                         at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                                                                         at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                                                                         at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                                                                         at android.view.View.measure(View.java:18850)
                                                                         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5963)
                                                                         at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                                         at android.view.View.measure(View.java:18850)
                                                                         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5963)
                                                                         at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
                                                                         at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
                                                                         at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
                                                                         at android.view.View.measure(View.java:18850)
                                                                         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5963)
                                                                         at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                                         at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2672)
                                                                         at android.view.View.measure(View.java:18850)
                                                                         at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2107)
                                                                         at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1223)
                                                                         at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1459)
                                                                         at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1114)
                                                                         at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6068)
                                                                         at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
                                                                         at android.view.Choreographer.doCallbacks(Choreographer.java:670)
                                                                         at android.view.Choreographer.doFrame(Choreographer.java:606)
                                                                         at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
                                                                         at android.os.Handler.handleCallback(Handler.java:739)
                                                                         at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                         at android.os.Looper.loop(Looper.java:152)
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5497)
                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

03-24 15:42:00.674 397-397 /? E / lowmemorykiller:写错/ proc / 14361 / oom_score_adj;错误号= 22 03-24 15:42:00.772 8619-15470 /? E / AbstractTracker:无法在未调用Looper.prepare()的线程内创建处理程序 03-24 15:42:46.180 8619-15456 /? E / AbstractTracker:无法在未调用Looper.prepare()的线程内创建处理程序 03-24 15:42:46.254 14770-14770 /? E / dex2oat:无法创建燕麦文件:/data/dalvik-cache/arm64/data@app@com.example.madik.sogim-2@split_lib_dependencies_apk.apk@classes.dex:权限被拒绝 03-24 15:42:46.581 14774-14774 /? E / dex2oat:无法创建燕麦文件:/data/dalvik-cache/arm64/data@app@com.example.madik.sogim-2@split_lib_slice_0_apk.apk@classes.dex:权限被拒绝 03-24 15:42:46.628 14776-14776 /? E / dex2oat:无法创建燕麦文件:/data/dalvik-cache/arm64/data@app@com.example.madik.sogim-2@split_lib_slice_1_apk.apk@classes.dex:权限被拒绝 03-24 15:42:46.671 14778-14778 /? E / dex2oat:无法创建燕麦文件:/data/dalvik-cache/arm64/data@app@com.example.madik.sogim-2@split_lib_slice_2_apk.apk@classes.dex:权限被拒绝 03-24 15:42:46.715 14780-14780 /? E / dex2oat:无法创建燕麦文件:/data/dalvik-cache/arm64/data@app@com.example.madik.sogim-2@split_lib_slice_3_apk.apk@classes.dex:权限被拒绝 03-24 15:42:46.758 14782-14782 /? E / dex2oat:无法创建燕麦文件:/data/dalvik-cache/arm64/data@app@com.example.madik.sogim-2@split_lib_slice_4_apk.apk@classes.dex:权限被拒绝 03-24 15:42:46.803 14784-14784 /? E / dex2oat:无法创建燕麦文件:/data/dalvik-cache/arm64/data@app@com.example.madik.sogim-2@split_lib_slice_5_apk.apk@classes.dex:权限被拒绝 03-24 15:42:46.845 14786-14786 /? E / dex2oat:无法创建燕麦文件:/data/dalvik-cache/arm64/data@app@com.example.madik.sogim-2@split_lib_slice_6_apk.apk@classes.dex:权限被拒绝 03-24 15:42:46.900 14788-14788 /? E / dex2oat:无法创建燕麦文件:/data/dalvik-cache/arm64/data@app@com.example.madik.sogim-2@split_lib_slice_7_apk.apk@classes.dex:权限被拒绝 03-24 15:42:46.945 14790-14790 /? E / dex2oat:无法创建燕麦文件:/data/dalvik-cache/arm64/data@app@com.example.madik.sogim-2@split_lib_slice_8_apk.apk@classes.dex:权限被拒绝 03-24 15:42:46.989 14792-14792 /? E / dex2oat:无法创建燕麦文件:/data/dalvik-cache/arm64/data@app@com.example.madik.sogim-2@split_lib_slice_9_apk.apk@classes.dex:权限被拒绝 03-24 15:42:47.383 14757-14805 / com.example.madik.sogim E / AbstractTracker:无法在未调用Looper.prepare()的线程内创建处理程序 03-24 15:42:50.414 14757-14816 / com.example.madik.sogim E / AbstractTracker:无法在未调用Looper.prepare()的线程内创建处理程序 03-24 15:42:50.829 14757-14819 / com.example.madik.sogim E / AbstractTracker:无法在未调用Looper.prepare()的线程内创建处理程序 03-24 15:42:50.865 14757-14818 / com.example.madik.sogim E /主题:不同的包name.com.example.madik.sogim,com.google.android.gms 03-24 15:42:53.808 14757-14836 / com.example.madik.sogim E / AbstractTracker:无法在未调用Looper.prepare()的线程内创建处理程序 03-24 15:42:53.962 14757-14843 / com.example.madik.sogim E / AbstractTracker:无法在未调用Looper.prepare()的线程内创建处理程序 03-24 15:42:54.917 14757-14854 / com.example.madik.sogim E / AbstractTracker:无法在未调用Looper.prepare()的线程内创建处理程序 03-24 15:42:54.933 14757-14855 / com.example.madik.sogim E / AbstractTracker:无法在未调用Looper.prepare()的线程内创建处理程序 03-24 15:42:56.027 14757-14856 / com.example.madik.sogim E / AbstractTracker:无法在未调用Looper.prepare()的线程内创建处理程序 03-24 15:42:56.089 14757-14857 / com.example.madik.sogim E / AbstractTracker:无法在未调用Looper.prepare()的线程内创建处理程序 03-24 15:42:56.101 14757-14757 / com.example.madik.sogim E / AndroidRuntime:FATAL EXCEPTION:main                                                                          处理:com.example.madik.sogim,PID:14757                                                                          java.lang.IndexOutOfBoundsException:索引3无效,大小为0                                                                              at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)                                                                              at java.util.ArrayList.get(ArrayList.java:308)                                                                              在com.example.madik.sogim.ImageAdapter.instantiateItem(ImageAdapter.java:43)                                                                              在android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1002)                                                                              在android.support.v4.view.ViewPager.populate(ViewPager.java:1150)                                                                              在android.support.v4.view.ViewPager.populate(ViewPager.java:1084)                                                                              在android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1614)                                                                              在android.view.View.measure(View.java:18850)                                                                              在android.widget.RelativeLayout.measureChildHorizo​​ntal(RelativeLayout.java:716)                                                                              在android.widget.RelativeLayout.onMeasure(RelativeLayout.java:462)                                                                              在android.view.View.measure(View.java:18850)                                                                              在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5963)                                                                              在android.widget.FrameLayout.onMeasure(FrameLayout.java:194)                                                                              在android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)                                                                              在android.view.View.measure(View.java:18850)                                                                              在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5963)                                                                              在android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)                                                                              在android.widget.LinearLayout.measureVertical(LinearLayout.java:748)                                                                              在android.widget.LinearLayout.onMeasure(LinearLayout.java:630)                                                                              在android.view.View.measure(View.java:18850)                                                                              在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5963)                                                                              在android.widget.FrameLayout.onMeasure(FrameLayout.java:194)                                                                              在android.view.View.measure(View.java:18850)                                                                              在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5963)                                                                              在android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)                                                                              在android.widget.LinearLayout.measureVertical(LinearLayout.java:748)                                                                              在android.widget.LinearLayout.onMeasure(LinearLayout.java:630)                                                                              在android.view.View.measure(View.java:18850)                                                                              在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5963)                                                                              在android.widget.FrameLayout.onMeasure(FrameLayout.java:194)                                                                              在com.android.internal.policy.PhoneWindow $ DecorView.onMeasure(PhoneWindow.java:2672)                                                                              在android.view.View.measure(View.java:18850)                                                                              在android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2107)                                                                              在android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1223)                                                                              在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1459)                                                                              在android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1114)                                                                              在android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:6068)                                                                              在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:858)                                                                              在android.view.Choreographer.doCallbacks(Choreographer.java:670)                                                                              在android.view.Choreographer.doFrame(Choreographer.java:606)                                                                              在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:844)                                                                              在android.os.Handler.handleCallback(Handler.java:739)                                                                              在android.os.Handler.dispatchMessage(Handler.java:95)                                                                              在android.os.Looper.loop(Looper.java:152)                                                                              在android.app.ActivityThread.main(ActivityThread.java:5497)                                                                              at java.lang.reflect.Method.invoke(Native Method)                                                                              在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)                                                                              在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 03-24 15:42:56.137 397-397 /? E / lowmemorykiller:编写错误/ proc / 14757 / oom_score_adj;错误号= 22 03-24 15:42:56.225 8619-15469 /? E / AbstractTracker:无法在未调用Looper.prepare()的线程内创建处理程序 03-24 15:43:37.980 14730-14730 /? E / SimcardDataModel:提供不受支持的插槽ID 1

1 个答案:

答案 0 :(得分:-1)

您拥有的覆盖方法对您也没有用,同时返回错误的值。 请删除以下代码行: -

@Override
public long getItemId(int position) {
    return position;
}
@Override
public int getItemViewType(int position) {
    return position;
}