안드로이드 ListView에서 아이템 클릭시 원하는 콜럼의 값만 조회하는 법이 궁금합니다

조회수 4555회

현재 코드 내에서 어댑터를 이용하여 4개의 콜럼을 가진 리스트뷰를 사용하고 있습니다. 여기에서 아이템을 클릭했을 때 클릭된 아이템의 일부 콜럼만 조회하고픈데 어떤 방법이 있을까요??

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



        db = new DBHelper(this);


        list = (ListView)findViewById(R.id.city_list);
        db.getListContents();

        final ArrayList<InfoClass> weatherList = new ArrayList<InfoClass>();
        Cursor data = db.getListContents();

        if(data.getCount() == 0){
            Toast.makeText(this, "There are no contents in this list!",Toast.LENGTH_LONG).show();
        }else{
            while(data.moveToNext()){
                InfoClass newInfo = new InfoClass(data.getString(1), data.getString(2), data.getString(3), data.getString(4));
                weatherList.add(newInfo);
                DBAdapter dbAdapter = new DBAdapter(this, weatherList);
                list.setAdapter(dbAdapter);
            }
        }


        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

               /* TextView item_latitude = (TextView)findViewById(R.id.item_latitude);
                TextView item_longitude = (TextView)findViewById(R.id.item_longitude);
                data_longitude = item_latitude.getText().toString();
                data_latitude = item_longitude.getText().toString();*/

                Intent intent = new Intent(CityList.this, MainActivity.class);

                intent.putExtra("data_latitude", data_latitude);
                intent.putExtra("data_longitude", data_longitude);


                setResult(Activity.RESULT_OK, intent);
                finish();


            }
        });

    }

1 답변

  • 제일 먼저 ListView의 아이템 하나가 클릭되는 것을 감지하는 리스너(OnItemClickListener)를 등록해주어야 합니다.

    리스너는 익명 클래스로 만드는 방법도 있고 하나의 객체로 만들어서 등록하는 방법이 있습니다.

    익명 클래스로 구현 한다면 아래와 같이 할 수 있습니다.

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // position이 클릭된 위치입니다. 
            // 컬렉션에서 적절하게 꺼내서 사용하시면 됩니다.
            Toast.makeText(getApplicationContext(), itemList.get(position).getSomethingColumn(), Toast.LENGTH_LONG).show();
    
            // 추가된 부분
            InfoClass selectedInfoClass = weatherList.get(position);
            selectedInfoClass.getXXX();
        }
    });
    
    • 감사합니다! 알 수 없는 사용자 2018.4.16 16:01
    • 혹시 저 itemList가 의미하는 것이 무엇인지도 함께 설명해주실 수 있으신가요???? 알 수 없는 사용자 2018.4.16 16:03
    • itemList 는 임시로 쓴건데 리스트뷰에서 보여주고 있는 데이터입니다~ 아이템들이죠 김선우 2018.4.16 16:27
    • 죄송합니다만 제가 이해를 잘 못해서.... 질문에 코드를 첨부하여 다시 질문드립니다 알 수 없는 사용자 2018.4.16 16:41
    • 코드는 4개의 콜럼을 가진 데이터베이스를 연결하여 리스트뷰에 뿌리는 형식이며, 이로 인하여 생성되는 아이템을 클릭할 경우 3,4 콜럼을 문자열로 받아오고픕니다. 주석처리된 부분에 해당 코드를 넣고픈데 아이템을 지정하려고 해봤으나 잘 되지를 않습니다. 알 수 없는 사용자 2018.4.16 16:43
    • 답변에 추가했습니다. 원하시는게 맞는지 모르겠네요 김선우 2018.4.16 17:03
    • 필요한 기능대로 돌아갑니다! 감사합니다! 알 수 없는 사용자 2018.4.17 09:42

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)