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

HashMap객체를 다른 액티비로 전달 후 사용

0 추천
일단 필요 할 것 같은 코딩 올립니다

<send intent activity>

 ArrayList<HashMap<String, String>> classList;
    ListView list;

    private static final String TAG_SUB = "subject";
    private static final String TAG_DAY = "day";

    ListAdapter adapter;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        list = (ListView) findViewById(R.id.lstv);
        classList = new ArrayList<HashMap<String, String>>();

 
      //중략// :hash맵에 들어갈 데이터를 db로 처리하는 부분입니다

 protected void showList() {

        try {

            SQLiteDatabase ReadDB = this.openOrCreateDatabase(dbName, MODE_PRIVATE, null);

            Cursor c = ReadDB.rawQuery("SELECT * FROM " + tablename, null);

            if (c != null) {

                if (c.moveToFirst()) {
                    do {//테이블에서 가져옴
                        String SUBJECT = c.getString(c.getColumnIndex("subject"));
                        String DAY = c.getString(c.getColumnIndex("day"));

                       HashMap<String, String> cls = new HashMap<String, String>();

                        cls.put(TAG_SUB, SUBJECT);
                        cls.put(TAG_DAY, DAY);

                        //어레이리스트에 추가
                        classList.add(cls);

                    } while (c.moveToNext());
                }
            }

            ReadDB.close();

            adapter = new SimpleAdapter(this, classList, R.layout.lstv, new String[]{TAG_SUB, TAG_DAY}, new int[]{R.id.tv1, R.id.tv2});

            list.setAdapter(adapter);
            list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int i, long l) {
                              
                    HashMap<String, String> cls =(HashMap<String, String>)parent.getItemAtPosition(i);

                    Intent intent = new Intent(getApplicationContext(), mylist.class);

                    intent.putExtra("cls", classList.get(i).get("TAG_SUB"));
                    startActivity(intent);

                }
            });

==========================================================

 

(받는 액티비티 )

public class mylist extends AppCompatActivity{

    ArrayList<HashMap<String, String>> classList;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();

        HashMap<String,String> getMap = new HashMap<String, String>();

         getMap = (HashMap<String, String>)intent.getSerializableExtra("cls") ;

           getMap = (HashMap) classList.get(0);

        Toast.makeText(getApplicationContext(), (CharSequence) getMap, Toast.LENGTH_SHORT).show();
    }
}

 

동작(원하는동작)

DB - > HashMap으로 받고 -> 리스트뷰에 뿌려줍니다

그리고 리스트뷰에서  ex) 선형대수학 수1 이렇게 아이템이 나오고 그걸 누르면

저 "선형대수학" "수1" 이라는 값을 다른액티비티로 보내고 그 값을 그대로

Toast, textview등에 받아졌는지 보이고 싶습니다.

 

여기저기 찾아보면서 보내는 쪽에서는 저렇게 보내는게 맞는 것 같은데,

getintent해서 받아지는지도 의문이구, 저 Toast만 없으면 일단 어플이 실행이 되긴합니다.

hash맵에 대해서 무지한 상태로 보고 따라하는 식으로 하는거라 어려움이 많습니다 개념도 없구요 ㅜㅜ

도움부탁드립니다
도해이 (270 포인트) 님이 2017년 6월 17일 질문

1개의 답변

0 추천
 
채택된 답변
선택한 결과만 전달하는 거라면 굳히 HashMap을 전달할 필요가 없죠.

선택된 item의 정보만 전달하면 됩니다.

list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int i, long l) {
        HashMap<String, String> cls =(HashMap<String, String>)parent.getItemAtPosition(i);

        HashMap<String, String> itemData = classList.get(i)

        Intent intent = new Intent(getApplicationContext(), mylist.class);

        intent.putExtra(TAG_SUB, itemData.get(TAG_SUB));
        intent.putExtra(TAG_DAY, itemData.get(TAG_DAY));
        
        startActivity(intent);
    }
});

(받는 곳)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent intent = getIntent();

    String subject = intent.getStringExtr(<SendActivity>.TAG_DAY);
    String day     = intent.getStringExtr(<SendActivity>.TAG_SUB);

    Toast.makeText(this, "Result : " + subject + ", " + day, Toast.LENGTH_SHORT).show();
}

댓글 코딩이라... flow만 참조하세요.
디자이너정 (42,810 포인트) 님이 2017년 6월 17일 답변
도해이님이 2017년 6월 18일 채택됨
감사합니다. 집가서 바로해봐야겠네요 ㅜㅜ
String subject = intent.getStringExtr(<SendActivity>.TAG_DAY);
    String day     = intent.getStringExtr(<SendActivity>.TAG_SUB);

혹시 이부분에서 SendActivity가 보낸 액티비티명 맞나요?
메인액티비티라서 <MainActivity>로 했는데 오류가 .. 일단찾아보겠습니다
그냥 TAG넣으면 되네요 너무감사합니다 사랑해요 ㅎㅎㅎ
...