2016-07-06 37 views
1

我是新來的android。每當我按下後退按鈕轉到主要活動時,我的動態按鈕就會自動複製,然後再次返回到第二個活動。在第二次活動中創建的動態按鈕在按下時再次返回到第二次活動時會自我複製

這裏是我的代碼:

public class MainActivity extends AppCompatActivity { 

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

    public void food_btn_handler(View v) { 
     Intent intent = new Intent(this, FoodActivity.class); 
     startActivity(intent); 
    } 
} 

//第二屆活動

enter link description here

public class FoodActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_food); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     loadFoodStatic(); 
     createButtonsForFoods(); 
    } 
} 

public class FoodActivity extends AppCompatActivity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_food); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     loadFoodStatic(); 
     createButtonsForFoods(); 
    } 

    private void createButtonsForFoods() { 
     ArrayList<Food> foods = Food.getFoods(); 
     LinearLayout layout = (LinearLayout) findViewById(R.id.layout_food); 
     for (final Food f : foods) { 
      Button b = new Button(this); 
      b.setText(f.getTitle()); 
      layout.addView(b); 
      b.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        Intent intent = new Intent(FoodActivity.this, DetailedActivity.class); 
        intent.putExtra("rid", f.getResid()); 
        intent.putExtra("title", f.getTitle()); 
        intent.putExtra("desc", f.getDescription()); 
        intent.putExtra("moreinfo", f.getMoreinfo_url()); 
        intent.putExtra("lat", f.getLatitude()); 
        intent.putExtra("lng", f.getLongitude()); 
        intent.putExtra("mark", f.getMarker()); 
        intent.putExtra("temp", f.getTemperature()); 
        intent.putExtra("cond", f.getCondition()); 
        intent.putExtra("weather", f.getWeather_url()); 
        startActivity(intent); //start activity 
       } 
      }); 
     } 
    } 

    private void loadFoodStatic() { 

     Food.getFoods().add(new Food(R.drawable.pic1, "Food Title1","Food  Description1","http://www.food1.com",-34.0,151.0,"Marker1",11.1,"Text1",  "http://www.weather1.com")); 
     Food.getFoods().add(new Food(R.drawable.pic2, "Food Title2", "Food  Description2","http://www.food2.com",2.222222,222.222222,"Marker2",22.2,"Text2",  "http://www.weather2.com")); 
     Food.getFoods().add(new Food(R.drawable.pic3, "Food Title3", "Food  Description3","http://www.food3.com",3.333333,333.333333,"Marker3",33.3,"Text3",  "http://www.weather3.com")); 
     Food.getFoods().add(new Food(R.drawable.pic4, "Food Title4", "Food  Description4","http://www.food4.com",4.444444,444.444444,"Marker4",44.4,"Text4",  "http://www.weather4.com")); 
    } 
} 

回答

0

那是因爲你通過調用loadFoodStatic每次添加食品。由於ArrayList/Foods是靜態的/單一的,它會保持在調用之間,每次創建第二個活動時,每次添加四個相同類型的食物。

得到的fixit的一種簡單方法是在你的loadFoodStatic先添加一個檢查空單:

if (Foods.getFoods().isEmpty) { 
    ... //add foods here only 
} 
+0

非常感謝你。是的,它解決了這個問題。 –

+0

很高興聽到@DanielA。隨時upvote並接受答案;-) –

相關問題