CoverFlow sinnvoll mit Firebase einsetzen (Intent)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • CoverFlow sinnvoll mit Firebase einsetzen (Intent)

    Hey Leute ,

    ich erzähl euch mal was ich gemacht habe sprich vorhabe .
    Erstmal s habe ich CoverFlow mit meiner Datenbank Firebase verbunden und es so hinbekommen dass die Bilder angezeigt werden so weit so gut.
    Danach wollte ich eigentlich dass wenn man auf ein CoverFlow Bild klickt es auf einer anderen Activity das Bild angezeigt wird plus noch eventuell Name von der Datenbank.
    Habe unzählige Versuche mit Intent gestartet , leider ohne Erfolg :(

    Das ist mein Fragment mit Coverflow :

    Brainfuck-Quellcode

    1. public class HomeFragment extends Fragment {
    2. private static final String TAG = "HomeFragment";
    3. //COVERFLOW
    4. private FeatureCoverFlow coverFlow;
    5. private FoodAdapter adapter;
    6. private TextSwitcher mCaption;
    7. private List<Food> rowItems = new ArrayList<>();
    8. private FirebaseAuth mAuth;
    9. @Nullable
    10. @Override
    11. public View onCreateView(LayoutInflater inflater, @Nullable final ViewGroup container, @Nullable Bundle savedInstanceState) {
    12. View view = inflater.inflate(R.layout.fragment_home, container, false);
    13. //----------------------COVERFLOW-----------------------------
    14. mAuth = FirebaseAuth.getInstance();
    15. showFood();
    16. mCaption =(TextSwitcher)view.findViewById(R.id.caption);
    17. mCaption.setFactory(new ViewSwitcher.ViewFactory() {
    18. @Override
    19. public View makeView() {
    20. LayoutInflater inflater = LayoutInflater.from(getContext());
    21. TextView txt = (TextView)inflater.inflate(R.layout.layout_title,null);
    22. return txt;
    23. }
    24. });
    25. final Animation in = AnimationUtils.loadAnimation(getContext(), R.anim.slide_in_top);
    26. Animation out = AnimationUtils.loadAnimation(getContext(), R.anim.slide_out_bottom);
    27. mCaption.setAnimation(in);
    28. mCaption.setAnimation(out);
    29. adapter = new FoodAdapter(rowItems, getContext());
    30. coverFlow = (FeatureCoverFlow)view.findViewById(R.id.coverFlow);
    31. coverFlow.setAdapter(adapter);
    32. coverFlow.setOnScrollPositionListener(new FeatureCoverFlow.OnScrollPositionListener() {
    33. @Override
    34. public void onScrolledToPosition(int position) {
    35. mCaption.setText(rowItems.get(position).getCaption());
    36. }
    37. @Override
    38. public void onScrolling() {
    39. }
    40. });
    41. coverFlow.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    42. @Override
    43. public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    44. Intent intent = new Intent(getActivity(), FoodDetailActivity.class);
    45. intent.putExtra("dataId",i);
    46. startActivity(intent);
    47. }
    48. });
    49. coverFlow.setOnScrollPositionListener(new FeatureCoverFlow.OnScrollPositionListener() {
    50. @Override
    51. public void onScrolledToPosition(int position) {
    52. position++;
    53. }
    54. @Override
    55. public void onScrolling() {
    56. }
    57. });
    58. return view;
    59. }
    60. //-----------------------------FIREBASE--------------------------
    61. public void showFood(){
    62. final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    63. DatabaseReference DB = FirebaseDatabase.getInstance().getReference().child("photos");
    64. DB.addChildEventListener(new ChildEventListener() {
    65. @Override
    66. public void onChildAdded(DataSnapshot dataSnapshot, String s) {
    67. if (dataSnapshot.exists()){
    68. Food item = new Food(dataSnapshot.getKey(), dataSnapshot.child("caption").getValue().toString(), dataSnapshot.child("image_path").getValue().toString());
    69. rowItems.add(item);
    70. adapter.notifyDataSetChanged();
    71. }
    72. }
    73. @Override
    74. public void onChildChanged(DataSnapshot dataSnapshot, String s) {
    75. }
    76. @Override
    77. public void onChildRemoved(DataSnapshot dataSnapshot) {
    78. }
    79. @Override
    80. public void onChildMoved(DataSnapshot dataSnapshot, String s) {
    81. }
    82. @Override
    83. public void onCancelled(DatabaseError databaseError) {
    84. }
    85. });
    86. }
    87. }
    Alles anzeigen


    Und das ist die Activity die die Datei abfangen soll

    Quellcode

    1. public class FoodDetailActivity extends AppCompatActivity {
    2. ImageView food_image;
    3. TextView food_title,food_tag;
    4. Context context;
    5. private Intent intent;
    6. private List<Food> rowItems = new ArrayList<>();
    7. private FoodAdapter adapter;
    8. @Override
    9. protected void onCreate( Bundle savedInstanceState) {
    10. super.onCreate(savedInstanceState);
    11. setContentView(R.layout.activity_fooddetail);
    12. //food_image = (KenBurnsView)findViewById(R.id.food_image);
    13. food_image = (ImageView) findViewById(R.id.food_image);
    14. food_title = (TextView) findViewById(R.id.food_title);
    15. food_tag = (TextView) findViewById(R.id.food_tag);
    16. if (getIntent() != null){
    17. int food_index = getIntent().getIntExtra("dataId",-1);
    18. if (food_index != -1)
    19. load(food_index);
    20. }
    21. }
    22. private void load(int index){
    23. Food food = rowItems.get(index);
    24. Picasso.with(getBaseContext()).load(food.getImage_path()).into(food_image);
    25. }
    26. }
    Alles anzeigen
    und das ist mein Adapter :D

    Quellcode

    1. blic class FoodAdapter extends BaseAdapter{
    2. List<Food> foodList;
    3. Context context;
    4. public FoodAdapter(List<Food> foodList, Context context) {
    5. this.foodList = foodList;
    6. this.context = context;
    7. }
    8. @Override
    9. public int getCount() {
    10. return foodList.size();
    11. }
    12. @Override
    13. public Object getItem(int i) {
    14. return foodList.get(i);
    15. }
    16. @Override
    17. public long getItemId(int i) {
    18. return i;
    19. }
    20. @Override
    21. public View getView(int i, View view, ViewGroup viewGroup) {
    22. View rootView = view;
    23. if (rootView==null){
    24. rootView = LayoutInflater.from(context).inflate(R.layout.layout_item, null);
    25. TextView name = (TextView)rootView.findViewById(R.id.label);
    26. ImageView image = (ImageView)rootView.findViewById(R.id.image);
    27. name.setText(foodList.get(i).getCaption());
    28. Picasso.with(context).load(foodList.get(i).getImage_path()).into(image);
    29. }
    30. return rootView;
    31. }
    32. }
    Alles anzeigen
    Jetzt habe ich euch alles geschickt. Bin echt sau am verzweifeln ;(


    Danke vorweg
  • Hi :D
    Mache ich das schon nicht in der Methode "load" ?!
    Ausserdem bekomme ich diese Fehlermeldung :


    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nazimturan.skipp/com.nazimturan.skipp.Home.FoodDetailActivity}: java.lang.IndexOutOfBoundsException: Index: 2, Size: 0

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von joey19 ()

  • nein in der "load" Methode erstellst du die Variable aber du fügst keine Daten ein, deine Liste "rowItems" ist zu laufzeit lehr. Du erstellst sie in Zeille 10 und willst in Zeile 41 Daten auslehsen. sonst geschied nichts mit der Liste "rowItems"
    Du bist in einer neuen Klasse Activity und nicht mehr in der "HomeFragment" Klasse wo du Daten in die Liste geschrieben hast.
    nur kannst nicht auf die Liste in "HomeFragment" zugreifen.

    Der Fehler "java.lang.IndexOutOfBoundsException: Index: 2, Size: 0" sagt ja auch das du den Index 2 aus der Liste lesen willst aber die größe 0 ist.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von jogimuc ()

  • Jetzt habe ich mir mal den Ansatz überlegt , leider auch ohne Erfolg

    Quellcode

    1. if (getIntent() != null){
    2. int food_index = getIntent().getIntExtra("foodId",-1);
    3. foodId.equals(food_index);
    4. if (food_index != -1){
    5. getDetail(foodId);
    6. }
    7. }
    8. }
    9. private void getDetail(final String foodId){
    10. foods.child(foodId).addValueEventListener(new ValueEventListener() {
    11. @Override
    12. public void onDataChange(DataSnapshot dataSnapshot) {
    13. Food food = dataSnapshot.getValue(Food.class);
    14. rowItems.add(food);
    15. Picasso.with(getBaseContext()).load(food.getImage_path())
    16. .into(food_image);
    17. }
    18. @Override
    19. public void onCancelled(DatabaseError databaseError) {
    20. }
    21. });
    22. }
    Alles anzeigen
    Ich weiss es nicht , komme irgendwie seit Tagen nicht weiter ist sau ätzend
  • Hi,
    verstehe nicht was das mit der"getDetail" Methode soll. Du versuchst deine Liste im Eventlistner zu füllen. Wenn kein Event eintrift wird auch nichts gefüllt. Die Methode "getDataChange" wir nur aufgrufen wenn sich daten ändern.
    Fülle die liste einfach mit den Daten aus der Firebase. oder übergebe die liste den Intent mit .
    ambesten du benutzt für die Liste eine eigene Klasse und du Kannst von beiten Klassen darauf zugreifen.
    Ein Feedback auf Tipps ist auch schön. :P