Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从RecyclerView删除项目时出现问题_Android_Android Recyclerview - Fatal编程技术网

Android 从RecyclerView删除项目时出现问题

Android 从RecyclerView删除项目时出现问题,android,android-recyclerview,Android,Android Recyclerview,当我点击“关闭”按钮时,我的回收物品中有一个应用程序崩溃并抛出错误。我的代码如下: public void remove(int position) { asset_type.remove(position); asset_count.remove(position); asset_value.remove(position); AssetDetailsActivity.assetValueId.remove(position); AssetDetails

当我点击“关闭”按钮时,我的回收物品中有一个应用程序崩溃并抛出错误。我的代码如下:

public void remove(int position) {
    asset_type.remove(position);
    asset_count.remove(position);
    asset_value.remove(position);
    AssetDetailsActivity.assetValueId.remove(position);
    AssetDetailsActivity.assetCountId.remove(position);
    AssetDetailsActivity.assetTypeId.remove(position);
    notifyItemRemoved(position);

}
我的错误日志和我的回收器视图中有2个以上的项目

2019-02-25 11:04:16.733 5036-5036/com.tachyloans E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.tachyloans, PID: 5036
    java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
        at java.util.ArrayList.remove(ArrayList.java:503)
        at com.tachyloans.common.MyAdapter.remove(MyAdapter.java:62)
        at com.tachyloans.common.MyAdapter$2.onClick(MyAdapter.java:113)
        at android.view.View.performClick(View.java:6310)
        at android.view.View$PerformClick.run(View.java:24970)
        at android.os.Handler.handleCallback(Handler.java:794)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:176)
        at android.app.ActivityThread.main(ActivityThread.java:6656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

这是因为您试图按顺序删除列表中的某些项目。删除(位置)。您可能正在使用以下代码删除相同的项目位置:

asset_type.remove(position);
asset_count.remove(position);
asset_value.remove(position);
AssetDetailsActivity.assetValueId.remove(position);
AssetDetailsActivity.assetCountId.remove(position);
AssetDetailsActivity.assetTypeId.remove(position);
问题的根源通常是因为您忘记了非基本数据类型始终是通过引用传递的,例如:
列表

在以下典型RecylerView适配器中,列表(
列表数据
)通过引用传递:

public class YourAdapter extends
    RecyclerView.Adapter<YourAdapter.ViewHolder> {

    ..

    private List<YourDatum> mData;

    public YourAdapter(List<YourDatum> data) {
        mData = data;
    }
}

MyAdapter第62行中的任何列表都只有一个值,并且您正试图从中删除不存在的第二个值。请尝试使用
position-1
public class YourActivity extends AppCompatActivity {

     ArrayList<YourDatum> mData;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         // ...

         // assuming that createInitializeData(10) will create 10 data
         mData = createInitializeData(10);

         // Now we're passing the data to adapter.
         YourAdapter adapter = new YourAdapter(mData);
         ...
     }
}
asset_type.remove(position);
asset_count.remove(position);
asset_value.remove(position);

// the following is not needed because it's incorrect
// AssetDetailsActivity.assetValueId.remove(position);
// AssetDetailsActivity.assetCountId.remove(position);
// AssetDetailsActivity.assetTypeId.remove(position)