Добавление элементов в целях ресайклера от другой деятельности

голоса
-1

Я хотел бы, чтобы нажать на кнопку, которая добавляет кучу новых объектов в целях ресайклера в другой деятельности.

У меня есть активность А (рецепт страница) и активность B (Список покупки). У меня есть кнопка меню в деятельности A, чтобы добавить все элементы массива через (ингредиенты) к деятельности Б Recycler Посмотреть ArrayList.

У меня есть цикл в активности А, чтобы пройти через каждый из компонентов массива:

for (int x = 0; x < recipeIngredients.length; x++) {
     ShoppingList.insertItem(recipeIngredients[x]);

}

И метод в деятельности B, который я использую в деятельности B для добавления отдельных элементов в целях ресайклера. Но при вызове в деятельности A (как описано выше), я получаю ссылку на нулевой объект.

Список покупок деятельности:

private RecyclerView mRecyclerView;
public RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
public static ArrayList<ShoppingItem> mShoppingList;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_shopping_list);

    mRecyclerView = findViewById(R.id.shopping_listView);
    mRecyclerView.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(this);
    mAdapter = new ShoppingListAdapter(mShoppingList);

    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setAdapter(mAdapter);

}

public void insertItem(String ingredient) {
    mShoppingList.add(new ShoppingItem(ingredient));
    mAdapter.notifyDataSetChanged();
}
Задан 20/04/2018 в 06:58
пользователем
На других языках...                            


2 ответов

голоса
1

Мое решение является:

Первый вы глобально объявить класс адаптера:

private List<ToDo> toDoList = new ArrayList<>();

теперь onCreateвы можете создать на Method:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_todos_list);

        setAdapters(); //Displaying data 
        prepareToDOData(); //set a data
    }

Теперь создайте setAdaters()для отображения данных:

private void setAdapters() {
        todosAdapter = new TodosAdapter(toDoList);
        todosAdapter.setClickListener(todoListItemClickListner);
        RecyclerView.LayoutManager mLayoutManager1 = new 
        LinearLayoutManager(getApplicationContext());
        rvTodos.setLayoutManager(mLayoutManager1);
        rvTodos.setItemAnimator(new DefaultItemAnimator());
        rvTodos.setAdapter(todosAdapter);
        todosAdapter.notifyDataSetChanged();
    }

Теперь создать prepareToDOData();для набора данных:

private void prepareToDOData() {
        ToDo data = new ToDo("Akash");
        toDoList.add(data);

        data = new ToDo("Mahesh");
        toDoList.add(data);


        data = new ToDo("Priyanka");
        toDoList.add(data);

        //notesAdapter.notifyDataSetChanged();
        todosAdapter.notifyDataSetChanged();
    }

я думаю , что в вашем примере вы можете забыли объявить insertItemв onCreateсм.ниже код:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_shopping_list);

    mRecyclerView = findViewById(R.id.shopping_listView);
    mRecyclerView.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(this);
    mAdapter = new ShoppingListAdapter(mShoppingList);

    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setAdapter(mAdapter);

    insertItem(); //this line you can add to forgot  
}
Ответил 20/04/2018 в 08:09
источник пользователем

голоса
1

Я объявил ArrayList в деятельности B:

static ArrayList<String> listItems = new ArrayList<String>();

Добавлена ​​строка «ингредиент», который создает элемент в деятельности А к ArrayList:

ShoppingList.listItems.add(ingredient);

а затем в OnCreate от активности B, добавить любые элементы из ArrayList в список покупок и уведомить адаптер:

for(String s : listItems) {
        mShoppingList.add(new ShoppingItem(s));
        mAdapter.notifyDataSetChanged();
    }
Ответил 21/04/2018 в 09:13
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more