有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当我从main传递一个Arraylist时。活动到接受者。活动仅获取arraylist的最后一个值

我有两个班,主要活动和接受者活动。在主活动中,我从edittext填充arraylist,并在按钮上单击我想将此arraylist传递给接收者。类,但它只获取Arraylist的最后一个值。我的代码是这个主活动

 public class main extends AppCompatActivity {
     EditText txt;
     Button check,save;
     String ts ="new ";


public List<String> name;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    txt= (EditText) findViewById(R.id.editText);
    check = (Button) findViewById(R.id.btn_conf);
    save = (Button) findViewById(R.id.btn_sve);

    check.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
       //   tmp.name.add(txt.getText().toString());
            name = new ArrayList<String>();
            name.add(txt.getText().toString());

        }
    });

    save.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(main.this, reciever.class);
            Bundle args = new Bundle();
            args.putSerializable("ARRAYLIST",(Serializable)name);
            intent.putExtra("BUNDLE",args);
            startActivity(intent);
        }
    });
}

} `

还有一个接受者。阶级

public class reciever extends AppCompatActivity {
Button rec;
String tmp="";
ArrayList<String> object;
int i=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_reciever);
    Intent intent = getIntent();


    Bundle args = intent.getBundleExtra("BUNDLE");
    object = (ArrayList<String>) args.getSerializable("ARRAYLIST");


    rec = (Button) findViewById(R.id.btnrec);
    rec.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for (i=0;i<object.size();i++)
            {
                tmp+=object.get(i);
            }
            Toast.makeText(getApplicationContext(),tmp, Toast.LENGTH_LONG).show();
        }
    });

}

}

如何传递列表中的所有项目


共 (3) 个答案

  1. # 1 楼答案

    每次创建Arraylist的新对象时。 做下面这样的事情

    public class main extends AppCompatActivity {
         EditText txt;
         Button check,save;
         String ts ="new ";
    
    
    public List<String> name=new ArrayList<>;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txt= (EditText) findViewById(R.id.editText);
        check = (Button) findViewById(R.id.btn_conf);
        save = (Button) findViewById(R.id.btn_sve);
    
        check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
           //   tmp.name.add(txt.getText().toString());
    
                name.add(txt.getText().toString());
    
            }
        });
    
        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(main.this, reciever.class);
                Bundle args = new Bundle();
                args.putSerializable("ARRAYLIST",(Serializable)name);
                intent.putExtra("BUNDLE",args);
                startActivity(intent);
            }
        });
    }
    
    } `
    
  2. # 2 楼答案

    每当您单击check{}创建新的ArrayList时,问题就出现在您的{}

    您需要在ClickListener外部创建ArrayList,如下面的代码所示

    试试这个

     name = new ArrayList<String>();
    check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
           //   tmp.name.add(txt.getText().toString());
    
                name.add(txt.getText().toString());
    
            }
        });
    

    像这样更改代码

    public class main extends AppCompatActivity {
         EditText txt;
         Button check,save;
         String ts ="new ";
    
    
    public List<String> name ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txt= (EditText) findViewById(R.id.editText);
        check = (Button) findViewById(R.id.btn_conf);
        save = (Button) findViewById(R.id.btn_sve);
        name = new ArrayList<String>();
    
        check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
           //   tmp.name.add(txt.getText().toString());
    
                name.add(txt.getText().toString());
    
            }
        });
    
        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(main.this, reciever.class);
                Bundle args = new Bundle();
                args.putSerializable("ARRAYLIST",(Serializable)name);
                intent.putExtra("BUNDLE",args);
                startActivity(intent);
            }
        });
    }
    
    }
    
  3. # 3 楼答案

    在每次调用checkon click listener时,您都会创建一个新的ArrayList并向其中添加一个元素。由于每次重新创建列表时,它将不会有多个元素

    只需在监听器外部创建ArrayList并将其添加到监听器内部,它就会累积各种条目