Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
Java 向arraylist添加数据_Java_Android_Listview_Android Fragments_Arraylist - Fatal编程技术网

Java 向arraylist添加数据

Java 向arraylist添加数据,java,android,listview,android-fragments,arraylist,Java,Android,Listview,Android Fragments,Arraylist,请帮忙。 在开发了一个在片段“计算器”(发送信息)和“购物清单”(接收信息)之间进行通信的接口之后,我似乎无法获得要添加到我的ArrayList中的信息。我知道信息已发送过来,但我似乎无法将其添加到列表中,以便将其合并到我的listview中。 而且,我不应该。如果我把信息硬编码进去 例如:myItems.add(新列表项(R.drawable.thrash,“玉米片”,1,50.00,60.00)) 它很好用 请帮忙 Calculator.java public class Calculato

请帮忙。 在开发了一个在片段“计算器”(发送信息)“购物清单”(接收信息)之间进行通信的接口之后,我似乎无法获得要添加到我的ArrayList中的信息。我知道信息已发送过来,但我似乎无法将其添加到列表中,以便将其合并到我的listview中。 而且,我不应该。如果我把信息硬编码进去 例如:myItems.add(新列表项(R.drawable.thrash,“玉米片”,1,50.00,60.00)) 它很好用

请帮忙

Calculator.java

public class Calculator extends Fragment {


private static EditText ItemText, Editcost, Editquantity, Calcost, Rtax;
private static RadioGroup rgroup;

CalculatorListener activityCommander;


public interface CalculatorListener{
   public void addtoCart(String itemName, int qty, double beforeTax, double afterTax);
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    try{
        activityCommander = (CalculatorListener) context;
    }catch (ClassCastException e){
        throw new ClassCastException(context.toString());
    }
}


public Calculator() {
    // 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_calculator, container, false);


    Editcost = (EditText)view.findViewById(R.id.editcost);
    ItemText = (EditText)view.findViewById(R.id.itemText);
    Editquantity = (EditText)view.findViewById(R.id.editquantity);
    Calcost = (EditText)view.findViewById(R.id.calcost);
    Rtax = (EditText)view.findViewById(R.id.rtax);

    rgroup = (RadioGroup)view.findViewById(R.id.rgroup);

    final ImageButton FieldButton = (ImageButton)view.findViewById(R.id.FieldButton);
    final ImageButton TaxButton = (ImageButton)view.findViewById(R.id.TaxButton);
    final ImageButton CalButton = (ImageButton)view.findViewById(R.id.CalButton);

    Rtax.setEnabled(false);
    Calcost.setEnabled(false);

    ItemText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                                          @Override
                                          public void onFocusChange(View v, boolean hasFocus) {
                                              if (!hasFocus) {
                                                  v.setBackgroundResource(R.drawable.edittxt);
                                              } else {
                                                  v.setBackgroundResource(R.drawable.edittxtfocus);
                                              }
                                          }
                                      }
    );

    Calcost.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                                         @Override
                                         public void onFocusChange(View v, boolean hasFocus) {
                                             if (hasFocus) {
                                                 v.setBackgroundResource(R.drawable.edittxtfocus);
                                             } else {
                                                 v.setBackgroundResource(R.drawable.edittxt);
                                             }
                                         }
                                     }
    );

    Editcost.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                                          @Override
                                          public void onFocusChange(View v, boolean hasFocus) {
                                              if (hasFocus) {
                                                  v.setBackgroundResource(R.drawable.edittxtfocus);
                                              } else {
                                                  v.setBackgroundResource(R.drawable.edittxt);
                                              }
                                          }
                                      }
    );
    Editquantity.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                                              @Override
                                              public void onFocusChange(View v, boolean hasFocus) {
                                                  if (hasFocus) {
                                                      v.setBackgroundResource(R.drawable.edittxtfocus);
                                                  } else {
                                                      v.setBackgroundResource(R.drawable.edittxt);
                                                  }
                                              }
                                          }
    );



    CalButton.setOnClickListener(
            new View.OnClickListener(){
                public void onClick(View v){
                    results(v);
                }

            }
    );

    return view;

}



public void results (View view)
{



    double taxValue = Double.parseDouble(Rtax.getText().toString()), cost = 0, newCost = 0;

    int quantity = 1, radiobuttonID = rgroup.getCheckedRadioButtonId(), index;

    String item = ItemText.getText().toString();


    //FIELD VALIDATIONS
    if(Editcost.getText().toString().isEmpty())
    {
        Toast show = Toast.makeText(getActivity(), "Cost is required!", Toast.LENGTH_SHORT);
        show.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);
        show.show();
    }


    //CHECKS THE TAX VALUE IF IT NEEDS TO BE CONVERTED
    if (taxValue > 1)
    {
        taxValue = taxValue / 100;
    }
    else
    {
        taxValue = taxValue * 1;
    }

    //CUSTOM VALIDATOR FOR QUANTITY FIELD
    if (Editquantity.getText().toString().isEmpty())
    {
        quantity = 1;
    }
    else if (!Editquantity.getText().toString().isEmpty())
    {
        quantity = Integer.parseInt(Editquantity.getText().toString());
    }


    //DECIDE WHETHER TO USE TAX INCLUDED OR EXCLUDED
    View radioButton = rgroup.findViewById(radiobuttonID);
    index = rgroup.indexOfChild(radioButton);

    if(index == 0)
    {
        newCost = (((cost = Double.parseDouble(Editcost.getText().toString())) * taxValue) + cost) * quantity;
    }
    else if (index == 1)
    {
        newCost = ((cost = Double.parseDouble(Editcost.getText().toString())) * quantity);
    }


    //PRINTS NEW COST TO SCREEN
    Calcost.setText("" + newCost);


    //CUSTOM HINT POP UP
    if(!item.isEmpty())
    {
        Toast show = Toast.makeText(getActivity(), item+" was added to cart", Toast.LENGTH_LONG);
        show.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
        activityCommander.addtoCart(item, quantity, cost, newCost);
        show.show();

    }else if(item.isEmpty() & !Editcost.getText().toString().isEmpty())
    {
        if (index == 0 || index == 1)
        {
            Toast show = Toast.makeText(getActivity(),"Item was added to cart", Toast.LENGTH_LONG);
            show.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
            activityCommander.addtoCart(item, quantity, cost, newCost);
            show.show();
        }

    }



}
}

Core.java

public class Core extends AppCompatActivity implements Calculator.CalculatorListener{

Toolbar toolbar;
TabLayout tabLayout;
ViewPager viewPager;
ViewPagerAdapter viewPagerAdapter;

@Override
protected  void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.core);
    toolbar = (Toolbar)findViewById(R.id.toolBar);
    setSupportActionBar(toolbar);
    tabLayout = (TabLayout)findViewById(R.id.tabLayout);
    viewPager = (ViewPager)findViewById(R.id.viewPager);
    viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
    viewPagerAdapter.addFragments(new Calculator(),"Calculator");
    viewPagerAdapter.addFragments(new ShoppingList(), "Shopping Cart");
    viewPager.setAdapter(viewPagerAdapter);
    tabLayout.setupWithViewPager(viewPager);


}

@Override
public void addtoCart(String itemName, int qty, double beforeTax, double afterTax) {
    ShoppingList mShoppingList = (ShoppingList) getSupportFragmentManager().findFragmentById(R.id.ShopFrag);
    if(mShoppingList != null)
    {
        mShoppingList.populatelist(itemName, qty, beforeTax, afterTax);
    }
    else{
        Log.e(Tag,"Cart is Null");
    }

}
ShoppingList.java

    package com.sta.salestaxaccumulator;


import android.app.LauncherActivity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;


public class ShoppingList extends Fragment {

    public List<ListItems> myItems = new ArrayList<ListItems>();



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


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {

        View view = inflater.inflate(R.layout.fragment_shopping_list, container, false);
        populatelistview(view);
        //setCart();
        return view;

    }


    public void populatelist(String itemName, int qty, double beforeTax, double afterTax)
    {


        myItems.add(new ListItems(R.drawable.thrash, itemName, qty, beforeTax, afterTax));
        //myItems.add(new ListItems(R.drawable.thrash, "Cornflakes", 1, 50.00, 60.00));

        /*Toast show = Toast.makeText(getActivity(),itemName+" is here", Toast.LENGTH_LONG);
        show.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);
        show.show();*/
    }

    /*public void setCart(String itemName, int qty, double beforeTax, double afterTax)
    {
        //myItems.add(new ListItems(R.drawable.thrash, "Cornflakes", 1, 50.00, 60.00));
        //myItems.add(new ListItems(R.drawable.thrash, "Cheese", 1, 80.00, 90.00));
        //myItems.add(new ListItems(R.drawable.thrash, "Rice", 1, 40.00, 70.00));
        //myItems.add(new ListItems(R.drawable.thrash, "Oatmeal", 2, 35.00, 62.00));
    }*/


    public void populatelistview(View view)
    {
        ArrayAdapter<ListItems> adapter = new MyListAdapter();
        ListView listView = (ListView)view.findViewById(R.id.listView);
        listView.setAdapter(adapter);
    }


    private class MyListAdapter extends ArrayAdapter<ListItems>
    {
        public MyListAdapter()
        {
            super(getActivity(), R.layout.custom_row, myItems);
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            //Ensures we have a view to work with (may have been given null)
            View itemView = convertView;
            if (itemView == null) {
                itemView = getActivity().getLayoutInflater().inflate(R.layout.custom_row, parent, false);
            }

            //Finds the item to work with
            ListItems currentitem = myItems.get(position);

            //Fills the view
            ImageView imageView = (ImageView) itemView.findViewById(R.id.Thrash);
            imageView.setImageResource(currentitem.getIconID());

            //Item Name
            TextView name = (TextView) itemView.findViewById(R.id.ItemName);
            name.setText(currentitem.getItemName());

            //Item Qty
            TextView qty = (TextView) itemView.findViewById(R.id.QuantityValue);
            qty.setText("" + currentitem.getQty());

            //Before Tax
            TextView btax = (TextView) itemView.findViewById(R.id.BeforeTaxValue);
            btax.setText("" + currentitem.getBeforeTax());

            //After Tax
            TextView atax = (TextView) itemView.findViewById(R.id.AfterTaxValue);
            atax.setText("" + currentitem.getAfterTax());


            imageView.setTag(currentitem);

            imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    myItems.remove(myItems.get(position));
                    notifyDataSetChanged();
                }

            });

            return itemView;
        }

    }



}
Core.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http//schemas.android.com/tools"
    xmlns:tools2="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.sta.salestaxaccumulator.Core">

    <android.support.design.widget.AppBarLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:id="@+id/AppBarFrag">

        <include
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            layout="@layout/toolbar_layout"/>

        <android.support.design.widget.TabLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/tabLayout"
            app:tabMode="fixed"
            app:tabGravity="fill">

        </android.support.design.widget.TabLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/viewPager"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/AppBarFrag">

        <fragment
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:name="com.sta.salestaxaccumulator.Calculator"
            tools2:layout="@layout/fragment_calculator"
            android:id="@+id/CalcuFrag" />

        <fragment
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:name="com.sta.salestaxaccumulator.ShoppingList"
            tools2:layout="@layout/fragment_shopping_list"
            android:id="@+id/ShopFrag"/>

    </android.support.v4.view.ViewPager>




</RelativeLayout>

ViewPagerAdapter.java

    public class ViewPagerAdapter extends FragmentPagerAdapter{


    ArrayList<Fragment> fragments = new ArrayList<>();
    ArrayList<String> tabTitles = new ArrayList<>();

    public void addFragments(Fragment fragments, String titles)
    {
        this.fragments.add(fragments);
        this.tabTitles.add(titles);

    }

    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabTitles.get(position);
    }
}
public类ViewPagerAdapter扩展了FragmentPagerAdapter{
ArrayList片段=新的ArrayList();
ArrayList tabTitles=新的ArrayList();
公共void addFragments(片段片段、字符串标题)
{
this.fragments.add(fragments);
this.tabTitles.add(titles);
}
公共ViewPagerAdapter(碎片管理器fm){
超级(fm);
}
@凌驾
公共片段getItem(int位置){
返回碎片。获取(位置);
}
@凌驾
public int getCount(){
返回fragments.size();
}
@凌驾
公共字符序列getPageTitle(int位置){
返回tabTitles.get(位置);
}
}

在调用购物车的某个方法之前,您应该检查购物车是否为空

ShoppingList cart = (ShoppingList)getSupportFragmentManager().findFragmentById(R.id.shoppinglistfrag);
if(cart != null){    
    cart.setCart(view,itemName,qty,beforeTax,afterTax);
}
else{
    Log.e(TAG, "null cart");
}
从文档中:

在以下情况下查找由给定id标识的片段: 从XML或添加到事务中时作为容器ID进行膨胀。 首先搜索当前添加到 管理者的活动;如果没有找到这样的片段,那么所有片段 当前在与此ID关联的后堆栈上进行搜索

因此,似乎您从未创建或使用过ShoppingList片段,因此FragmentManager无法找到它

尝试将ShoppingList作为局部变量添加到活动中,并在MainActivity onCreate中初始化它

public class Core extends AppCompatActivity implements Calculator.CalculatorListener{

    Toolbar toolbar;
    TabLayout tabLayout;
    ViewPager viewPager;
    ViewPagerAdapter viewPagerAdapter;
    ShoppingList mShoppingList;

    @Override
    protected  void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        ...

        mShoppingList = new ShoppingList();

    }

    @Override
    public void addtoCart(View view,String itemName, int qty, double beforeTax, double afterTax) {
        mShoppingList.setCart(view,itemName,qty,beforeTax,afterTax);
    }
}
编辑:

对于ShoppingList类,将
ListView
ArrayAdapter
类变量设置为。然后可以从
populatelist()
方法访问它们。将项目添加到列表中后,请调用
adapter.notifyDataSetChanged()

注:
将来,问一个新问题,不要完全改变现有的问题。其他人将来来寻找答案时会感到困惑。

请提供完整的Logcat输出,然后我可以更新我的答案。谢谢,伙计。因为怀疑它是空的。为什么呢?根据代码,我有一些东西应该被传递到setCart(view、itemName、qty、beforeTax、postax)方法。我更新了答案,希望能有所帮助。谢谢,我查看了你的更新,并做了一些自己的更改。请参阅上面显示的代码示例。这次我在core.java中包含了对指定片段的引用(“ShopFrag”),但是现在我遇到了一个新的错误,如上面的图片链接所示。我需要查看完整的ShoppingList.javaI已经完整地添加了ShoppingList.java并更新了问题描述。我修复了前面提到的NullPointerException问题,或者至少我认为我修复了。现在这个问题是获取从计算器片段传递的数据,该片段添加到我的ArrayList中并显示在listview中。
public class Core extends AppCompatActivity implements Calculator.CalculatorListener{

    Toolbar toolbar;
    TabLayout tabLayout;
    ViewPager viewPager;
    ViewPagerAdapter viewPagerAdapter;
    ShoppingList mShoppingList;

    @Override
    protected  void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        ...

        mShoppingList = new ShoppingList();

    }

    @Override
    public void addtoCart(View view,String itemName, int qty, double beforeTax, double afterTax) {
        mShoppingList.setCart(view,itemName,qty,beforeTax,afterTax);
    }
}