2016-06-05 7 views
0

Bär mit mir, das ist meine erste Android App und ich brauche Hilfe, um Arraylist (n) von Fragment zu einem anderen (frag1 zu frag2) zu übertragen. Ich las über Bundle und Schnittstelle, aber ich konnte diese Lösungen nicht implementieren. jede detaillierte Lösung wäre hilfreich.senden Arraylist zwischen zwei Fragmenten

hier ist mein Haupt acitvity

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    Intent intent = getIntent(); 
    String message = intent.getStringExtra("array_list"); 

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
    tabLayout.setTabTextColors(R.color.colorPrimaryDark, R.color.colorAccent); 
    tabLayout.addTab(tabLayout.newTab().setText("Split").setIcon(R.drawable.money)); 
    tabLayout.addTab(tabLayout.newTab().setText("Item List").setIcon(R.drawable.list)); 
    tabLayout.addTab(tabLayout.newTab().setText("Rates").setIcon(R.drawable.settings)); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 


    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
    final PagerAdapter adapter = new PagerAdapter 
      (getSupportFragmentManager(), tabLayout.getTabCount()); 
    viewPager.setAdapter(adapter); 
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 

hier mein frag1

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View frag1v = inflater.inflate(R.layout.activity_frag1, container, false); 

    //Add Button// 
    Button b = (Button) frag1v.findViewById(R.id.add_btn); 
    final ArrayList<Double> n = new ArrayList<Double>(); 
    final EditText e = (EditText) frag1v.findViewById(R.id.sum); 
    final EditText d = (EditText) frag1v.findViewById(R.id.editText3); 
    final TextView tx = (TextView) frag1v.findViewById(R.id.textView4); 
    final Double div = Double.parseDouble(d.getText().toString()); 

    // Shared Setting // 
    SharedPreferences Setting_pre = getActivity().getSharedPreferences("Setting", Context.MODE_PRIVATE); 
    final String Discount_shared = Setting_pre.getString("Discount", "0"); 
    final String Service_shared = Setting_pre.getString("Service", "1.1"); 
    final String Tax_shared = Setting_pre.getString("Tax", "1.16"); 


    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (e.getText().length() > 0) { 
       Double e_double = Double.parseDouble(e.getText().toString()); 
       Double div = Double.parseDouble(d.getText().toString()); 
       Double sum_d = e_double/div; 
       n.add(sum_d); 
      } 
      Double sum = 0.0; 
      for (int i = 0; i < n.size(); i++) { 
       sum += n.get(i); 
      } 
      e.setText(""); 

      if (Discount_shared.equals("0")) { 
       Double Discount_M = 1.0; 
       Double sum_d = sum/div; 
       Double Discount_Sum = sum_d * Discount_M; 
       Double Service_M = Double.parseDouble(Service_shared.toString()); 
       Double Service_Sum = Discount_Sum * Service_M; 
       Double Tax_M = Double.parseDouble(Tax_shared.toString()); 
       Double Tax_Sum = Service_Sum * Tax_M; 
       String Total = Tax_Sum.toString().format("%.2f", Tax_Sum); 
       tx.setText(Total); 
      } else { 
       Double Discount_M = Double.parseDouble(Discount_shared.toString()); 
       Double sum_d = sum/div; 
       Double Discount_Sum = sum_d * Discount_M; 
       Double Service_M = Double.parseDouble(Service_shared.toString()); 
       Double Service_Sum = Discount_Sum * Service_M; 
       Double Tax_M = Double.parseDouble(Tax_shared.toString()); 
       Double Tax_Sum = Service_Sum * Tax_M; 
       String Total = Tax_Sum.toString().format("%.2f", Tax_Sum); 
       tx.setText(Total); 
      } 


     } 
    }); 

    //clear// 
    Button c = (Button) frag1v.findViewById(R.id.clear_btn); 
    c.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      n.clear(); 
      tx.setText("0"); 
     } 
    }); 


    return frag1v; 

} 

mein frag2 hier

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View frag2v = inflater.inflate(R.layout.activity_frag2, container, false); 



    return frag2v; 
} 
+0

Was ist der Grund, dass Sie nicht verwenden können, bündeln? –

+0

ich weiß nicht, wie man es benutzt! – user3533072

+1

Dies kann hilfreich sein: https://guides.codepath.com/android/using-parcelable am Anfang. Noch ein Tipp: Arbeite an der Benennung deiner Variablen. Ihr Code ist jetzt wirklich nicht lesbar. –

Antwort

-1

Da Ihr Problem ist, dass Sie wissen wollen, ist, wie zu senden Es verwendet eine Absicht, dieser Beitrag adressiert dieses Problem: Pass ArrayList<Double> from one activity to another activity on android

Ein Codebeispiel:

FirstActivity:

Intent intent = new Intent(this, OtherActivity.class); 
ArrayList<Double> listDouble = new ArrayList<Double>(); 
listDouble.add(1111.00000); 
listDouble.add(13331.00000); 
intent.putExtra("arraylist", listDouble); 
startActivity(intent); 

OTHER: (Abrufen Doppelarraylist)

ArrayList<Double> listDouble = (ArrayList<Double>) getIntent().getSerializableExtra("arraylist"); 
System.out.println("...serialized data.." + listDouble); 

Für Fragment Komunikation bei dieser einen Blick Beitrag: Basic Communication between two fragments oder in der offiziellen Dokumentation: https://developer.android.com/training/basics/fragments/communicating.html

public class YourActivity implements FragmentA.TextClicked{ 
@Override 
public void sendText(String text){ 
    // Get Fragment B 
    FraB frag = (FragB) 
     getSupportFragmentManager().findFragmentById(R.id.fragment_b); 
    frag.updateText(text); 
} 

}

// Fragment A definiert eine Schnittstelle, und ruft die Methode, wenn public class benötigt Fraga Fragment erstreckt {

TextClicked mCallback; 

public interface TextClicked{ 
    public void sendText(String text); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 

    // This makes sure that the container activity has implemented 
    // the callback interface. If not, it throws an exception 
    try { 
     mCallback = (TextClicked) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() 
      + " must implement TextClicked"); 
    } 
} 

public void someMethod(){ 
    mCallback.sendText("YOUR TEXT"); 
} 

@Override 
public void onDetach() { 
    mCallback = null; // => avoid leaking, thanks @Deepscorn 
    super.onDetach(); 
} 

}

// Fragment B eine öffentliche Methode hat etwas zu tun mit dem Text public class FragB erweitert Fragment {

public void updateText(String text){ 
    // Here you have it 
} 

}