2016-07-06 35 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并接受答案;-) –

相关问题