2016-05-17 4 views
-1

助けてください。 フラグメント間の通信用インターフェイスを開発した後"電卓"(送信情報)および"ShoppingList"(受信情報)情報をArrayListに追加できないようです。私は情報が送られたことを知っているが、私はリストビューにそれを組み込むためにリストに追加されるようには見えない。 また、私はしないでください。 の情報をハードコードする場合は、次のようになります。myItems.add(新しいListItems(R.drawable.thrash、 "Cornflakes"、1,50.00,60.00)); うまく動作します。arraylistにデータを追加

ご協力ください。

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; 
     } 

    } 



} 

ListItems.java

package com.sta.salestaxaccumulator; 


public class ListItems { 
    private int IconID; 
    private String ItemName; 
    private int Qty; 
    private double BeforeTax, AfterTax; 

    public ListItems(int iconID, String itemName, int qty, double beforeTax, double afterTax) { 
     IconID = iconID; 
     ItemName = itemName; 
     Qty = qty; 
     BeforeTax = beforeTax; 
     AfterTax = afterTax; 
    } 

    public int getIconID() { 
     return IconID; 
    } 

    public String getItemName() { 
     return ItemName; 
    } 

    public int getQty() { 
     return Qty; 
    } 

    public double getBeforeTax() { 
     return BeforeTax; 
    } 

    public double getAfterTax() { 
     return AfterTax; 
    } 

} 

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); 
    } 
} 
+0

完全なLogcat出力を入力してください。その後、私の回答を更新できます。 – RScottCarson

答えて

1

あなたのカートは、それの方法のいずれかを呼び出す前にnullの場合は、チェックする必要があります。 FragmentManagerドキュメントから

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でそれを初期化...

​​3210

編集:

あなたのShoppingListクラスについては、お使いのListViewArrayAdapterクラスを作ります変数。その後、populatelist()メソッドからアクセスできます。アイテムをあなたのリストに追加したら、adapter.notifyDataSetChanged()に電話してください。

注: 今後、新しい質問をして、既存の質問を完全に変更しないでください。将来的に回答を探すようになる人は混乱します。

+0

ありがとうございます。それはNullと思われます。どうして?コードを基に、何かがsetCart(view、itemName、qty、beforeTax、afterTax)メソッドに渡されているはずです。 –

+0

私は答えを更新しました。 – RScottCarson

+0

ありがとうございました。私はあなたのアップデートを見直し、私自身のいくつかの変更を加えました。そのように表示されている上記のコードサンプルを参照してください。今回は、指定したフラグメント( "ShopFrag")の参照をcore.javaに含めましたが、上の画像リンクに示されている新しいエラーが発生しました。 –

関連する問題