Получение значений из другого фрагмента и добавление элементов в пользовательское представление переработчика - PullRequest
0 голосов
/ 12 февраля 2019

Проблема в том, что метод добавления называется нулевым, и я не знаю почему.Все, что я хочу сделать, это получить значения из фрагмента расходов и добавить элемент в пользовательское представление рециркулятора, значение элемента - это то, что я ввел во фрагмент расходов.

Ниже приведен код Java главного экрана.:

package com.example.admin.test2;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;

import org.w3c.dom.Text;

import java.util.ArrayList;


/**
 * A simple {@link Fragment} subclass.
 */
public class MainScreen extends Fragment {

    private ArrayList<ExampleItem> mExampleList;

    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

  //  Spinner spinner;
    EditText amountt;
    EditText detailss;
    EditText datee;

    public MainScreen() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View view = inflater.inflate (R.layout.fragment_main_screen, container, false);

            mExampleList = new ArrayList <ExampleItem>();
            mExampleList.add(new ExampleItem(R.drawable.others, "", "", "ADD EXPENSES"));

            mRecyclerView = view.findViewById(R.id.recyclerView);
            mRecyclerView.setHasFixedSize(true);
            mLayoutManager = new LinearLayoutManager(getContext());
            mAdapter = new ExampleAdapter(mExampleList);

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

        return view;
    }


    public void insertItem()
    {
        Bundle bundle = getArguments();
        String deTails = bundle.getString("Details");
        String aMount = bundle.getString("Amount");

        mExampleList.add(0, new ExampleItem(R.drawable.food, "Food & Drink", ""+ deTails, "₱ " + aMount));
        mAdapter.notifyDataSetChanged();
    }    
}

Ниже приведено еще одно действие, из которого будет получено значение:

package com.example.admin.test2;

import android.app.DatePickerDialog;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;

import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

public class Expense extends Fragment {

    private ArrayList<ExampleItem> mExampleList;

    public Expense() {
        // Required empty public constructor
    }
    //SPINNER
    Spinner sp1;
    CustomAdapter adapter;
    String[] names = {"Food & Drink", "Shopping", "Transportation", "Home", "Bills & Fees", "Entertainment", "Healthcare", "Education", "Beauty", "Others"};
    int[] images = {R.drawable.food, R.drawable.shopping, R.drawable.transportation, R.drawable.home, R.drawable.bills, R.drawable.entertainment, R.drawable.medical, R.drawable.education, R.drawable.beauty, R.drawable.others};

    //DATE PICKER
    private EditText mDisplayDate;
    private DatePickerDialog.OnDateSetListener mDateSetListener;

    FloatingActionButton fab;
    EditText amounttt;
    EditText detailsss;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate (R.layout.fragment_expense, container, false);

        //spinner
        sp1 = (Spinner)view.findViewById(R.id.customSpinner);

        adapter = new CustomAdapter(getActivity(), names, images);
        sp1.setAdapter(adapter);

        //fab onClick - sending values to the recycler view
        fab = (FloatingActionButton) view.findViewById(R.id.fabs);
        detailsss = (EditText) view.findViewById(R.id.textDetailss) ;
        amounttt = (EditText) view.findViewById(R.id.textAmountt);

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                int pos = sp1.getSelectedItemPosition();
                String descrptn = detailsss.getText().toString();
                String amouunt = amounttt.getText().toString();

                Bundle bundle = new Bundle();
                bundle.putString("Details", descrptn);
                bundle.putString("Amount", amouunt);
                bundle.putInt("Position", pos);

                android.support.v4.app.FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
                android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                MainScreen ms = new MainScreen();
                ms.setArguments(bundle);
                ms.insertItem();
                fragmentTransaction.replace(R.id.replaceLayout, ms);
                fragmentTransaction.commit();
            }
        });

        //date picker
        mDisplayDate = (EditText) view.findViewById(R.id.datePick);

        mDisplayDate.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Calendar cal = Calendar.getInstance();
                int year = cal.get(Calendar.YEAR);
                int month = cal.get(Calendar.MONTH);
                int day = cal.get(Calendar.DAY_OF_MONTH);

                DatePickerDialog dialog = new DatePickerDialog(getActivity(),
                        android.R.style.Theme_Holo_Light_Dialog_MinWidth,
                        mDateSetListener,
                        year, month, day);
                dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                dialog.show();

            }
        });

        mDateSetListener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int day) {
                //Calendar calendar = Calendar.getInstance();
                //String currentDate = DateFormat.getDateInstance().format(calendar.getTime());

                month = month + 1;
                String date = month + "-" + day + "-" + year;
                mDisplayDate.setText(date);
            }
        };

        return view;
    }

}

Ниже приведен код адаптера:

package com.example.admin.test2;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder> {

    private ArrayList<ExampleItem> mExampleList;

    public static class ExampleViewHolder extends RecyclerView.ViewHolder
    {
        public ImageView mImageView;
        public TextView mLabel;
        public TextView mDetails;
        public TextView mAmount;

        public ExampleViewHolder(View itemView) {
            super(itemView);

            mImageView = itemView.findViewById(R.id.imageIcon);
            mLabel = itemView.findViewById(R.id.textLabel);
            mDetails = itemView.findViewById(R.id.textDetails);
            mAmount = itemView.findViewById(R.id.textAmount);
        }
    }

    public ExampleAdapter(ArrayList<ExampleItem> exampleList)
    {
        mExampleList = exampleList;
    }

    @NonNull
    @Override
    public ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.customlist, parent, false);
        ExampleViewHolder evh = new ExampleViewHolder(view);
        return evh;
    }

    @Override
    public void onBindViewHolder(@NonNull ExampleViewHolder holder, int position) {
        ExampleItem currentItem = mExampleList.get(position);

        holder.mImageView.setImageResource(currentItem.getmImageResource());
        holder.mLabel.setText(currentItem.getMlabel());
        holder.mDetails.setText(currentItem.getMdetails());
        holder.mAmount.setText(currentItem.getMamount());
    }

    @Override
    public int getItemCount() {
        if (mExampleList == null)
            return 0;
        else
            return  mExampleList.size();
    }
}

И ниже приведеноКод Java элемента:

package com.example.admin.test2;

public class ExampleItem {

    private int mImageResource;
    private String mlabel;
    private String mdetails;
    private String mamount;

    public ExampleItem(int imageResource, String label, String details, String amount)
    {
        mImageResource = imageResource;
        mlabel = label;
        mdetails = details;
        mamount = amount;
    }

    public int getmImageResource()
    {
        return mImageResource;
    }

    public String getMlabel() {
        return mlabel;
    }

    public String getMdetails() {
        return mdetails;
    }

    public String getMamount() {
        return mamount;
    }


}

для получения полных кодов и ошибок, пожалуйста, обратитесь к этой ссылке (поскольку весь код не подходит и превышает 30000 слов): https://textuploader.com/15s40

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Для меня это тоже не сработало.Я рекомендую вам создать метод в вашем адаптере, который напрямую изменяет список внутри адаптера.Поэтому вместо того, чтобы делать:

  mExampleList.add(0, new ExampleItem(R.drawable.food, "Food & Drink", ""+ deTails, "₱ " + aMount));
        mAdapter.notifyDataSetChanged();

внутри адаптера, у вас есть метод, подобный:

public void add (ExampleItem itemToAdd) {
   mExampleList.add(itemToAdd);
   notifyDataSetChanged();
}

и в вашей деятельности:

mAdapter.add(new ExampleItem(R.drawable.food, "Food & Drink", ""+ deTails, "₱ " + aMount));
0 голосов
/ 12 февраля 2019

Вы добавили метод insertItem () в MAINSCREEN JAVA CODE , но никогда не вызывались в onCreateView () из MAINSCREEN JAVA CODE Я предлагаю вам добавить код insertItem () в onCreateView () из ГЛАВНЫЙ КОД JAVA .

Редактировать: я добавилДемо-приложение, пожалуйста, обратитесь эту ссылку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...