【问题标题】:attributes of an automatically created objects自动创建对象的属性
【发布时间】:2014-03-19 03:36:34
【问题描述】:

我有一个由电影对象填充的数组

每次点击某个按钮时都会创建一个“电影”对象 并根据用户给出的数据给出其属性

问题在于每次创建对象时,所有对象的名称都会更改为最后创建的对象的名称 我的代码有什么问题

public class MovieReg_activity extends Activity {

    public static List<movie> movies = new ArrayList<movie>();

    String movName ;
    int dvdNo ;
    int x=0 ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mov_reg_layout);
        EditText etdvd_no = (EditText)findViewById(R.id.etdvds);
        Button btMovie_submit = (Button)findViewById(R.id.btmovsubmit);


    //  dvdNo = Integer.parseInt(etdvd_no.getText().toString()); // to string then to int :)

        btMovie_submit.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                EditText etmovie_name = (EditText)findViewById(R.id.etmovname);

                movName= etmovie_name.getText().toString();
                movies.add(x,new movie(movName , dvdNo) );
                String name3= movie.getName() ;
                x++ ;
                int size =movies.size() ;
                Toast.makeText(MovieReg_activity.this, "no of movies added :"+size , Toast.LENGTH_SHORT).show();    

            }
        });

    }

}

类电影

public class movie {

    public static  String name45;
    int dvd_no ;

    public  movie( String name1 , int dvd_no1) 
    {
        this.name45=name1 ;
            this.dvd_no = dvd_no1 ; 

                Log.d("DEBUG", "constructor name1 " + name1);
            Log.d("DEBUG", "constructor name45 " + name45);

    }

    public static String getName()
    {
        return name45 ;
    }

}

【问题讨论】:

  • 首先,这段代码看起来不像用“String name3= movie.getName();”行编译没有定义电影对象,除非 getName() 是静态方法?
  • @KarimVarela 编辑并添加了班级电影

标签: android oop object arraylist


【解决方案1】:

在您的电影类中,name45 被设置为静态变量。这意味着对于所有电影对象,该变量只有一个副本。使 getName() 不是静态的,并使 name45 不是静态的。这应该可以解决您的问题。

@Override
public void onClick(View v) {

    EditText etmovie_name = (EditText)findViewById(R.id.etmovname);

    movName= etmovie_name.getText().toString();
    movie movieToAdd = new movie(movName, dvdNo);
    movies.add(x,movieToAdd );
    String name3= movieToAdd.getName() ;
    x++ ;
    int size =movies.size() ;
    Toast.makeText(MovieReg_activity.this, "no of movies added :"+size , Toast.LENGTH_SHORT).show();    

}

【讨论】:

  • 每次调用 getName() 时都会给我一个错误!!
  • 您需要从电影对象的实例中调用 getName(),添加代码。
猜你喜欢
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 2019-07-01
  • 2016-06-14
  • 1970-01-01
相关资源
最近更新 更多