마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Listview getExtra 질문

0 추천

1번화면 EditText에서 입력한 값을 2번 화면으로 Intent한 뒤 ListView에 de1Name만 나타내는 작업을 하고 싶은데 방법을 모르겠습니다.

adapter에 어떻게 적용을 해야하는지를 모르겠습니다. 도움 부탁드립니다.

<1번화면>

rok = (Button)findViewById(R.id.rok);
rcancle = (Button) findViewById(R.id.rcancle);

rname = (EditText)findViewById(R.id.rname);
raddress = (EditText)findViewById(R.id.raddres);
rprice = (EditText)findViewById(R.id.rprice);
rdate1 = (EditText)findViewById(R.id.rdate1);
rdate2 = (EditText)findViewById(R.id.rdate2);
rfirst = (EditText)findViewById(R.id.rfirst);
rcause = (EditText)findViewById(R.id.rcause);

rok.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String Rname = rname.getText().toString();
        String Radd = raddress.getText().toString();
        String Rprice = rprice.getText().toString();
        String Rdate1 = rdate1.getText().toString();
        String Rdate2 = rdate2.getText().toString();
        String Rfirst = rfirst.getText().toString();
        String Rcause = rcause.getText().toString();



        Intent intent=new Intent(getApplicationContext(), room_view_main.class);
        intent.putExtra("Rname", Rname);
        intent.putExtra("Radd", Radd);
        intent.putExtra("Rpirce", Rprice);
        intent.putExtra("Rdate1", Rdate1);
        intent.putExtra("Rdate2", Rdate2);
        intent.putExtra("Rfirst", Rfirst);
        intent.putExtra("Rcause", Rcause);
        startActivity(intent);
    }
});

<2번화면>

Intent intent = getIntent();
String de1Name = intent.getParcelableExtra("Rname");
String deP1rice = intent.getStringExtra("Rprice");
String de1add = intent.getStringExtra("Radd");
String de1date1 = intent.getStringExtra("Rdate1");
String de1date2 = intent.getStringExtra("Rdate2");
String de1first = intent.getStringExtra("Rfirst");
String de1cause = intent.getStringExtra("Rcause");
final ArrayList<String> mid = new ArrayList<String>();
vlist=(ListView)findViewById(R.id.listView);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1 ,mid);
vlist.setAdapter(adapter);//리스트 형태지점


btn=(Button)findViewById(R.id.btn);
reg_button = findViewById(R.id.reg_button);
Pass (190 포인트) 님이 2021년 12월 18일 질문
Pass님이 2021년 12월 18일 수정

1개의 답변

0 추천

님처럼 여러개의 값은 다음 화면으로 넘길 때 일일이 다 넘기는 보다는  class로 감싸서 넘기면 훨씬 보기가 편해집니다. 그런데 안드로이드에서는  오브젝트는 시스템 특성 상 Serializable이나 Parcelable을 구현해 주어야 합니다. 두개의 차이는 답이 길어지므로, 구글링을 해보시기 바랍니다.

우선, 다음 화면에 넘길 클래스를 하나 만듭니다.

// 정확하게 뭐를 하는 화면인지 몰라서 임의의 이름을 사용.
public class DeliveryExtra implment Serialzable {
    private final String delName;
    private final String delAdd;
    private final String delPrice;
    private final String delDdate1;
    private final String delDate2;
    private final String delrFirst;
    private final String delCause;
    //생성자, getter는 생략.
}

 

다음 액티비티의 인텐트를 생성할 때  데이터를 넘깁니다.

rok.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String Rname = rname.getText().toString();
        String Radd = raddress.getText().toString();
        String Rprice = rprice.getText().toString();
        String Rdate1 = rdate1.getText().toString();
        String Rdate2 = rdate2.getText().toString();
        String Rfirst = rfirst.getText().toString();
        String Rcause = rcause.getText().toString();

        DeliverExtra deliveryExtra = new DeliveryExtra(
             Rname,
             Radd,
             Rprice,
             Rdate1,
             Rdate2,
             Rfirst,
             Rcause
        );

        Intent intent=new Intent(getApplicationContext(), room_view_main.class);
        intent.putExtra(Activity2.EXTRA_DELVERY, deliveryExtra);
        startActivity(intent);
    }
});


// 편의상 다음 액티비티를 Activity2로 함.
public Activity2 ... {
    public static final String EXTRA_DELVERY = "delivery";
}

 

Activity2에서 전달받은 데이터를 가져옴

public class Activity2 .... {
   public static final String EXTRA_DELVERY = "delivery";

   @Override
   protected void onCreate(Bundle savedInstance) {
        super.onCreate(...);
        setContentView(...);

        readDataFromIntent(); 
   }

   private void readDataFromIntent() {
      DeliveryExtra deliveryExtra = (DeliveryExtra) getIntent().getSerializableExtra(EXTRA_DELVERY);

     // 여기에서 deliveryExtra를 adapter에서 사용할 수 있는 데이터 타입으로 가공.

      vlist = findViewById(R.id.listView);
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1 ,mid);
      vlist.setAdapter(adapter);//리스트 형태지점
    }

   ...
}

 

deliveryExtra를 adapter에서 사용할 수 있는 데이터 타입으로 가공하셔야 하는데, 제한적인 정보로는 님이 뭐를 하시는지 알 수가 없어서, 이 부분은 패스하겠습니다. 님이 필요한 형태대로 데이터를 가공해서 adapter에 전달해서 사용하세요.

참고로 요즘은 리스트뷰를 사용하지 않습니다. RecyclerView를 사용합니다.

 

spark (227,530 포인트) 님이 2021년 12월 18일 답변
...