Android的Recyclerview编辑在多个位置编辑EDITTEXT的任一位置时,

问题描述 投票:0回答:1

...我工作的一个项目。我得到的物品形式的服务器列表,并显示在recyclerview。一切都很好,直到如今,我有每个项目内的EditText。每当我在编辑的EditText然后,它在多个的EditText(值自动地)不同possitions的变化。请帮我解决这个问题。

I 

//This is adapter

public class SampleListAdapter extends RecyclerView.Adapter<SampleListAdapter.MySampleHolder> {
    private Context context;
    private View mView;
    private List<Brands> brandsList;
    private List<InputOrders> sampleListSelected;
    public PreferenceConnector connector;
    private InputOrders orders;
    private DataItem dataItemForUpdate;
    private static final String NULL_STRING = "";
    private static final String SAMPLE_PRODUCT = "1";




    public SampleListAdapter(){}

    public SampleListAdapter(Context context, List<Brands> brandsList, DataItem dataItemForUpdate) {
        this.context = context;
        this.brandsList = brandsList;
        this.dataItemForUpdate = dataItemForUpdate;

    }

    @NonNull
    @Override
    public MySampleHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        mView = LayoutInflater.from(context).inflate(R.layout.item_sample_view, parent, false);
        return new MySampleHolder(mView);
    }

    @Override
    public void onBindViewHolder(@NonNull MySampleHolder holder, int position) {
        sampleListSelected = new ArrayList<>();
        connector = new PreferenceConnector(context);
        bindItemsWithView(holder);
    }



    @Override
    public int getItemCount() {
        if (brandsList.size() > 0) {
            return brandsList.size();
        } else {
            return 0;
        }
    }


    private void bindItemsWithView(MySampleHolder holder) {

        if(brandsList.size()!=0) {
            if (brandsList.get(holder.getAdapterPosition()).getIsBrand().equals(AppConstants.BRAND + NULL_STRING)) {
                holder.textBrandSampleName.setText(brandsList.get(holder.getAdapterPosition()).getName());

            }

    }



    public List<InputOrders> getSampleListSelected() {
        return DataController.getmInstance().getSampleListSelected();
    }

    public void setSampleListSelected(List<InputOrders> sampleListSelected) {
        DataController.getmInstance().setSampleListSelected(sampleListSelected);
    }

    class MySampleHolder extends RecyclerView.ViewHolder {
        private TextView textBrandSampleName;
        private EditText editBrandSampleValue;

        MySampleHolder(View itemView) {
            super(itemView);

            textBrandSampleName = itemView.findViewById(R.id.text_brand_sampel_name);
            editBrandSampleValue = itemView.findViewById(R.id.edit_brand_sample_value);
        }

    }

    public interface OnItemFoundListener{
        void onItemFound(List<InputOrders> listOfOrders);
    }
}



//This is Activity.


public class ProductCategoryActivity extends BaseActivity implements View.OnClickListener {
    private String INPUT_ID = null;
    private DoctorTabsPagerAdapter doctorTabsPagerAdapter;
    private ChemistTabsPagerAdapter chemistTabsPagerAdapter;
    private FragmentManager fragmentManager;
    private TabLayout tabLayout;
    private ViewPager pager;
    private Toolbar toolbarProduct;
    private Button buttonConfirm;
    private Input input;
    DataReceivedListener listener;
    private boolean isDoctor;
    public static final String TAG = ProductCategoryActivity.class.getSimpleName();
    private boolean isUpdateInput;
    private DataItem dataForUpdate;

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_product_category);
        initUi();
        initData();
    }

    @Override
    public void initData() {
        super.initData();
        isDoctor = connector.getBoolean(AppConstants.KEY_ROLE);
        fragmentManager = getSupportFragmentManager();
        String getInput = getIntent().getStringExtra(AppConstants.PASS_INPUT);
        input = new Gson().fromJson(getInput, Input.class);
        isUpdateInput = getIntent().getBooleanExtra(AppConstants.IS_INPUT_UPDATE, false);


        if (isUpdateInput) {
            String strData = getIntent().getStringExtra(AppConstants.PASS_UPDATE_INPUT);
            dataForUpdate = new Gson().fromJson(strData, DataItem.class);
            Bundle bundle = new Bundle();
            bundle.putString(AppConstants.PASS_UPDATE_INPUT, strData);

            if (dataForUpdate.getChemistsId().equals("0")) {
                doctorTabsPagerAdapter = new DoctorTabsPagerAdapter(fragmentManager, ProductCategoryActivity.this, bundle);
                pager.setAdapter(doctorTabsPagerAdapter);
            } else {
                chemistTabsPagerAdapter = new ChemistTabsPagerAdapter(fragmentManager, ProductCategoryActivity.this, bundle);
                pager.setAdapter(chemistTabsPagerAdapter);
            }

            tabLayout.setupWithViewPager(pager);
        } else {

            if (isDoctor) {
                doctorTabsPagerAdapter = new DoctorTabsPagerAdapter(fragmentManager, ProductCategoryActivity.this);
                pager.setAdapter(doctorTabsPagerAdapter);
            } else {
                chemistTabsPagerAdapter = new ChemistTabsPagerAdapter(fragmentManager, ProductCategoryActivity.this);
                pager.setAdapter(chemistTabsPagerAdapter);
            }

            tabLayout.setupWithViewPager(pager);
        }

    }

    @Override
    public void initUi() {
        super.initUi();

        toolbarProduct = findViewById(R.id.toolbarProduct);
        buttonConfirm = findViewById(R.id.button_confirm_product);
        tabLayout = findViewById(R.id.tabLayout);
        pager = findViewById(R.id.swiper);
        setSupportActionBar(toolbarProduct);
        toolbarProduct.setNavigationIcon(R.drawable.back_arrow_whit);

        toolbarProduct.setNavigationOnClickListener(v -> onBackPressed());
        buttonConfirm.setOnClickListener(this);


    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button_confirm_product:
                if (isUpdateInput){
                    input.setGiftDetails(new GiftsAdapter().getInputGiftList());
                    if (new PODAdapter().getPOBOrdersList() != null){
                        input.setProductDetalis(new PODAdapter().getPOBOrdersList());
                        for( int i=0; i<input.getProductDetalis().size(); i++)  {
                            String inputId = input.getInputId();
                            input.getProductDetalis().get(i).setInputId(inputId);
                        }
                    }
                    if (new SampleListAdapter().getSampleListSelected()!= null){
                        input.setProductDetalis(new SampleListAdapter().getSampleListSelected());
                        for( int i=0; i<input.getProductDetalis().size(); i++)  {
                            String inputId = input.getInputId();
                            input.getProductDetalis().get(i).setInputId(inputId);
                        }
                    }
                    apiUpdateMrInput(token, input);

                }
                else if (InternetConnection.isNetworkAvailable(ProductCategoryActivity.this)) {
                    addInputApi(token, input);
                } else {
                    Snackbar.make(rootView, getString(R.string.no_internet), Snackbar.LENGTH_SHORT).show();
                }

                break;
        }

    }


    public void addInputGiftApi(String token, List<InputGift> inputGifts) {
        processDialog.showDialog(ProductCategoryActivity.this, false);
        Call<InputGiftResponce> call = apiInterface.addInputGift(token, inputGifts);
        call.enqueue(new Callback<InputGiftResponce>() {
            @Override
            public void onResponse(@NonNull Call<InputGiftResponce> call, @NonNull Response<InputGiftResponce> response) {
                processDialog.dismissDialog();
                if (response.isSuccessful()) {
                    if (response.body() != null) {
                        if (Objects.requireNonNull(response.body()).getStatusCode() == AppConstants.RESULT_OK) {
                            // Set Array Lis to null
                            //----------
                            new GiftsAdapter().setInputGiftList(null);
                            DataController.getmInstance().setInputGiftList(null);


                            Intent startMainActivity = new Intent(ProductCategoryActivity.this, MainActivity.class);
                            startActivity(startMainActivity);

                            Toast.makeText(ProductCategoryActivity.this, Objects.requireNonNull(response.body()).getMessage(), Snackbar.LENGTH_LONG).show();
                        } else {
                            Toast.makeText(ProductCategoryActivity.this, Objects.requireNonNull(response.body()).getMessage(), Snackbar.LENGTH_LONG).show();

                        }
                    }
                }
            }

            @Override
            public void onFailure(Call<InputGiftResponce> call, Throwable t) {
                processDialog.dismissDialog();
                Snackbar.make(rootView, t.getMessage(), Snackbar.LENGTH_LONG).show();

            }
        });
    }


    public void apiAddInputSamples(String token, List<InputOrders> inputOrders) {


        processDialog.showDialog(ProductCategoryActivity.this, false);
        Call<MainResponse> call = apiInterface.addInputProductList(token, inputOrders);

        call.enqueue(new Callback<MainResponse>() {
            @Override
            public void onRespon`enter code here`se(@NonNull Call<MainResponse> call, Response<MainResponse> response) {
                processDialog.dismissDialog();
                if (response.body().getStatusCode() == AppConstants.RESULT_OK) {
                    Snackbar.make(rootView, response.body().getMessage(), Snackbar.LENGTH_LONG).show();
                    // Set Array Lis to null
                    //----------
                    new SampleListAdapter().setSampleListSelected(null);
                    DataController.getmInstance().setOrderListSelected(null);

                    // On Response of Input Brand Calling add input Gift Api
                    //---------------
                    Intent startMainActivity = new Intent(ProductCategoryActivity.this, MainActivity.class);
                    startActivity(startMainActivity);

                } else {
                    Snackbar.make(rootView, response.body().getMessage(), Snackbar.LENGTH_LONG).show();
                }
            }

            @Override
            public void onFailure(@NonNull Call<MainResponse> call, @NonNull Throwable t) {
                processDialog.dismissDialog();
                Snackbar.make(rootView, t.getMessage(), Snackbar.LENGTH_LONG).show();
            }
        });
    }



    public void apiUpdateMrInput(String token, Input input){
        processDialog.showDialog(ProductCategoryActivity.this, false);
        Call<MainResponse> call = apiInterface.updateMrInput(token, input);
        call.enqueue(new Callback<MainResponse>() {
            @Override
            public void onResponse(@NonNull Call<MainResponse> call, @NonNull Response<MainResponse> response) {
                processDialog.dismissDialog();
                if (response.isSuccessful()){
                    if (Objects.requireNonNull(response.body()).getStatusCode() == AppConstants.RESULT_OK){
                        Toasty.success(ProductCategoryActivity.this, Objects.requireNonNull(response.body()).getMessage(), Toast.LENGTH_LONG).show();
                        new SampleListAdapter().setSampleListSelected(null);
                        new PODAdapter().setPOBOrdersList(null);
                        new GiftsAdapter().setInputGiftList(null);
                        Intent inUserReportList = new Intent(ProductCategoryActivity.this, SearchDateWiseInputActivity.class);
                        inUserReportList.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                        startActivity(inUserReportList);
                        finish();
                    }
                    else{
                        Toasty.error(ProductCategoryActivity.this, Objects.requireNonNull(response.body()).getMessage(), Toast.LENGTH_LONG).show();
                    }
                }
            }

            @Override
            public void onFailure(@NonNull Call<MainResponse> call, @NonNull Throwable t) {
                processDialog.dismissDialog();
                Toasty.error(ProductCategoryActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();

            }
        });
    }


    public void apiAddInputBrands(String token, List<InputOrders> inputOrders) {
        processDialog.showDialog(ProductCategoryActivity.this, false);
        Call<MainResponse> call = apiInterface.addInputProductList(token, inputOrders);

        call.enqueue(new Callback<MainResponse>() {
            @Override
            public void onResponse(@NonNull Call<MainResponse> call, @NonNull Response<MainResponse> response) {
                processDialog.dismissDialog();
                if (response.body().getStatusCode() == AppConstants.RESULT_OK) {
                    Snackbar.make(rootView, response.body().getMessage(), Snackbar.LENGTH_LONG).show();
                    // Set Array List to null
                    //----------
                    new BrandsAdapter().setOrderListSelected(null);
                    DataController.getmInstance().setOrderListSelected(null);

                    Intent startMainActivity = new Intent(ProductCategoryActivity.this, MainActivity.class);
                    startActivity(startMainActivity);
                    //---------------

                } else {
                    Snackbar.make(rootView, response.body().getMessage(), Snackbar.LENGTH_LONG).show();
                }
            }

            @Override
            public void onFailure(Call<MainResponse> call, Throwable t) {
                processDialog.dismissDialog();
                Snackbar.make(rootView, t.getMessage(), Snackbar.LENGTH_LONG).show();
            }
        });
    }


    public void callingAllApi() {

        if (isDoctor) {

                if (new BrandsAdapter().getOrderListSelected() != null) {
                    List<InputOrders> inputB = new BrandsAdapter().getOrderListSelected();
                    if (inputB.size() > 0) {
                        for (int i = 0; i < inputB.size(); i++) {
                            inputB.get(i).setInputId(INPUT_ID);
                        }
                        apiAddInputBrands(token, inputB);
                    }
                }


                if (new GiftsAdapter().getInputGiftList() != null) {
                    List<InputGift> inputGifts = new GiftsAdapter().getInputGiftList();
                    if (inputGifts.size() > 0) {
                        for (int i = 0; i < inputGifts.size(); i++) {
                            inputGifts.get(i).setInputId(INPUT_ID);
                        }
                        addInputGiftApi(token, inputGifts);
                    }
                }

                if (new SampleListAdapter().getSampleListSelected()!= null) {
                    List<InputOrders> inputSamples = new SampleListAdapter().getSampleListSelected();
                    if (inputSamples.size() > 0) {
                        for (int i = 0; i < inputSamples.size(); i++) {
                            inputSamples.get(i).setInputId(INPUT_ID);
                        }
                        apiAddInputSamples(token, inputSamples);
                    }
                }

        }
        else{
            if (new PODAdapter().getPOBOrdersList() != null) {
                List<InputOrders> inputOrders = new PODAdapter().getPOBOrdersList();
                if (inputOrders.size() > 0) {
                    for (int i = 0; i < inputOrders.size(); i++) {
                        inputOrders.get(i).setInputId(INPUT_ID);
                    }
                    apiAddInputBrands(token, inputOrders);
                }
            }
        }
    }

    public void addInputApi(String token, Input input) {
        processDialog.showDialog(ProductCategoryActivity.this, false);
        Call<InputResponce> call = apiInterface.addInput(token, input);
        call.enqueue(new Callback<InputResponce>() {
            @Override
            public void onResponse(@NonNull Call<InputResponce> call, @NonNull Response<InputResponce> response) {
                processDialog.dismissDialog();
                if (response.isSuccessful()) {

                    if (response.code() == 200) {
                        if (Objects.requireNonNull(response.body()).getStatusCode() == AppConstants.RESULT_OK) {
                            // Calling all api, product, gift, and Pod
                            INPUT_ID = response.body().getData().getInputId();
                            callingAllApi();
                        } else {
                            Snackbar.make(rootView, response.body().getMessage(), Snackbar.LENGTH_INDEFINITE).show();

                        }
                    }
                }
            }

            @Override
            public void onFailure(@NonNull Call<InputResponce> call, @NonNull Throwable t) {
                processDialog.dismissDialog();
                Snackbar.make(rootView, t.getMessage(), Snackbar.LENGTH_INDEFINITE).show();

            }
        });
    }


    public void setDataReceivedListener(DataReceivedListener listener) {
        this.listener = listener;
    }

    public interface DataReceivedListener {
        void onReceived();
    }


}
android android-recyclerview
1个回答
0
投票

我想你可以尝试从setHasStableIds Android的适配器方法。它指示是否在该数据集合中的每个项可以与长型的唯一标识符来表示。所以,当你建立你的适配器只需添加

    init { setHasStableIds(true) }
© www.soinside.com 2019 - 2024. All rights reserved.