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


현재 코드 내에서 어댑터를 이용하여 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();


            }
        });

    }

  • 2018년 04월 16일에 수정됨
    Software Developer
  • 2018년 04월 16일에 작성됨

조회수 51


Banner nodejs

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년 04월 16일에 작성됨
    Software Developer

  • 감사합니다!    이정민   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     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close