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

리스트뷰 intent값 전달하는거 질문입니다

0 추천

리스트뷰에서 position을 지정해서 해당되는 값을 다음액티비티로 전달하려고합니다.

그런데 putExtra 를 어떻게써야될지모르겟어요... 도와주십쇼

인텐트 보내는쪽 소스입니다.

protected void showList(){
        try {
            JSONObject jsonObj = new JSONObject(myJSON);
            peoples = jsonObj.getJSONArray(TAG_RESULTS);

            for(int i=0;i<peoples.length();i++){
                JSONObject c = peoples.getJSONObject(i);
                String name = c.getString(TAG_NAME);
                String address = c.getString(TAG_ADD);
                String addCode = c.getString(TAG_ADDCODE);
                String showday = c.getString(TAG_DAY);
                String showtime = c.getString(TAG_TIME);
                String showtime2 = c.getString(TAG_TIME2);
                String member = c.getString(TAG_MEMBER);

                HashMap<String,String> persons = new HashMap<String,String>();
                persons.put(TAG_NAME,name);
                persons.put(TAG_ADD,address);
                persons.put(TAG_DAY,showday);
                persons.put(TAG_TIME,showtime);
                persons.put(TAG_TIME2,showtime2);
                persons.put(TAG_MEMBER,member);
                persons.put(TAG_ADDCODE,addCode);
                personList.add(persons);
            }
            final ListAdapter adapter = new SimpleAdapter(
                    Show_list_Activity.this, personList,
                    R.layout.list_item,
                    new String[]{TAG_NAME,TAG_ADD,TAG_DAY,TAG_TIME,TAG_TIME2,TAG_MEMBER},
                    new int[]{ R.id.name, R.id.address,R.id.showday,R.id.showtime,R.id.showtime2,R.id.member}
            );
            list.setAdapter(adapter);
            list.setTextFilterEnabled(true);
            list.setClickable(true);
            list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//                    Toast.makeText(getApplicationContext(),position, Toast.LENGTH_LONG).show();
                    Log.d("포지션",position+"");

                    Intent intent = new Intent(mContext,Detail_Activity.class);                                               이부분부터 ""뒤에 들어갈 인자를 모르겟어요.
                    intent.putExtra("name",);
                    
                    intent.putExtra("add",TAG_ADD);
                    intent.putExtra("day",TAG_DAY);
                    intent.putExtra("time1",TAG_TIME);
                    intent.putExtra("time2",TAG_TIME2);
                    intent.putExtra("member",TAG_MEMBER);

                    startActivity(intent);
                    Log.d("인텐트",intent+"");
                }
            });
        } catch (JSONException e) {
            e.printStackTrace();
        }
받는쪽 소스입니다.
Intent intent = getIntent(); // 보내온 Intent를 얻는다
Log.d("받는" +"인텐트",intent+"");

name.setText(intent.getStringExtra("name"));
day.setText(intent.getStringExtra("day"));
time1.setText(intent.getStringExtra("time1"));
time2.setText(intent.getStringExtra("time2"));
members.setText(intent.getStringExtra("members"));
add.setText(intent.getStringExtra("add"));
신입생 (510 포인트) 님이 2016년 10월 14일 질문

1개의 답변

+1 추천

코드를 관리가 수월하도록 변경해 보세요.

먼저 person 정보를 HashMap에 넣지 마시고 Peson 클래스를 만드셔서 사용하세요.

public class Person implement Serializable {
         private name;
         private address;
         private showDay;
         private showTime;
         private showTime2;
         private member;
         private addCode;

        //getter & setter
}

SimpleAdapter를 굳이 고집하시 마시고  커스텀 어댑터를 하나 구현하세요. 간단합니다. SmartAdapter 와 같은 라이브러리를 사용하면 커스텀 어댑터도 보기 좋은 형태로 구현 가능합니다.

public class PersonAdapter extends BaseAdapter {
      List<Person> items;

      PersonAdapter(List<Person> items) {
             this.items = items;
      }
      
     //서너개의 메소드를 구현하세요. 인터넷 보면 커스텀 어댑터 만드는 예제는 넘쳐납니다.
}

데이터를 파싱하시고 리스트를 만드세요. Json 파싱은 JSONObject를 쓰지 마시고 Gson같은 라이브러리의 도움을 받으면 리스트도 한줄로 파싱이 가능합니다.

            List<Person> personList = new ArrayList<Person>(); 
           JSONObject jsonObj = new JSONObject(myJSON);
            peoples = jsonObj.getJSONArray(TAG_RESULTS);

            for(int i=0;i<peoples.length();i++){
                JSONObject c = peoples.getJSONObject(i);
                String name = c.getString(TAG_NAME);
                String address = c.getString(TAG_ADD);
                String addCode = c.getString(TAG_ADDCODE);
                String showday = c.getString(TAG_DAY);
                String showtime = c.getString(TAG_TIME);
                String showtime2 = c.getString(TAG_TIME2);
                String member = c.getString(TAG_MEMBER);
               
                Person person = new Person();
                person.setName(name);
               //...
                personList.add(person);
            }

/* Gson을 사용한다면 
List<Person> personList = new Gson().fromJson(myJSON, new TypeToken<List<Person>>(){}.getType());
*/

리스트 어댑터 생성

final PersonAdapter adapter = new PersonAdapter(personList);
list.setAdapter(adapter);
list.setTextFilterEnabled(true);
list.setClickable(true);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {              
                    Intent intent = new Intent(mContext,Detail_Activity.class);    
                    Person person = adapter.get(position);
                    intent.putExtra("person", person);                  
                    startActivity(intent);
                }
});

Second Activity에서 넘겨준 Person 객체를 사용하시면 됩니다.

Peson person = (Person)getIntent().getSerializableExtra("person");

이 것보다 좀더 좋은 방법이 있는지도 찾아보시고 잘 리팩토링하시길 바래요.

spark (224,800 포인트) 님이 2016년 10월 14일 답변
와...정말감사합니다...!!
...