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

안녕하세요. 개발초보인학생입니다. 안드로이드 리스트뷰 클릭에 대해 질문있습니다.

0 추천

안녕하세요. 

개발 실력이 아직 초보자인 학생입니다.

다름이 아니오라 혼자 인터넷과 책을 이용하여 이런저런 정보를 찾아서 어찌어찌 만들기는 하였는데

리스트뷰로 출력되는 각각의 아이템의 클릭이 꼬여서 이문제 해결방법을 알고싶어서 

질문합니다. 미흡한 설명 죄송합니당...

제가 APM 셋업 개발환경으로 서버: 아파치 디비:mysql 을 php를 활용하여 현재 어플프로젝트를 진행하구있습니다.

 테이블에 데이터 적재부분은 잘됩니다. 그리고 실력이 부족하여 많은 시간이 걸렸지만 적재되있는 모든 데이터를 리스트뷰로 출력하는것도 성공하였습니다.

 그 후 리스트뷰에 온 아이템 클릭리스너를 주어서 클릭을 가능하게 하였고, alertdiarog를 이용하여 메시지 상자도 뜨게하였습니다.

메시지 상자가 뜬 후 확인 버튼을 누르게 되면 새로운 화면으로 이동하게되고, 리스트뷰 아이템 1 번에 있는(리스트뷰 처음 아이템을 클릭하였을때) 내용이 새로운 화면에 출력되게 됩니다.

하지만 리스트뷰 2번쨰 아이템을 눌려도 1번째 클릭했을때 처럼 이벤트가 발생하게됩니다. 여기 부분이 문제입니다. 3번쨰를 눌러도 1번쨰 클릭했을때 처럼 됩니다.

분명 제가 책과 인터넷으로 찾아보면서 , 제 실력또한 아주 초보이기떄문에 잘못 만든거겟지만 이거 해결방법을 알고싶습니다.

 

위의 코드가 리스트뷰클래스 자바 코드입니다. php를 통해서 매칭테이블에 쌓여있는 데이터를 전부 갖고와서 리스트뷰로 출력을 해줍니다. 그리고 해당되는 리스트뷰아이템을 클릭시 메시지창이뜨고 확인을 누르면 그 리스트뷰 내용을 다른화면으로 뿌려주며 인원수를 1 올리려고합니다....

그런데 2번 아이템을 눌러도 3번아이템을 눌러도 1번아이템이 눌렸을떄 처럼 진행이됩니다....

그리고 4번 5번 아이템을 누르면 그떄서야 2번아이템을 눌렀을때 진행되는 이벤트가 발생합니다!

이점을 해결하고싶어서 이렇게 질문합니다...

스냅샷도 첩부합니당..ㅠ_ㅠ 도움을 꼭좀 얻고싶습니당..

리스트뷰 출력 화면 -> 여기서 1번 아이템(저녁식사 부분을 클릭하면)

메시지 상자가 출력되고 확인 버튼을 누르게 되면

이렇게 새로운 화면으로 리스트뷰아이템에 있던 데이터를 보내줍니다.

하지만 2번아이템(농구)을 눌러도 3번은 눌러도 여전히 첫번째아이템을 눌렸을때 처럼 진행이됩니다..

이렇게 길게 써도 되는지 모르겠네요 죄송합니당.......

답글 달아주시면 정말 감사하겠습니당 

큰수 (160 포인트) 님이 2016년 11월 16일 질문

2개의 답변

0 추천
public class list extends Activity implements AdapterView.OnItemClickListener {
    int count = 1;
    String myJSON;
    TextView textView;
    TextView matching_title;
    TextView matching_topic;
    TextView matching_nowpeople;
    TextView matching_people;
    TextView matching_hour;
    TextView matching_min;
    TextView matching_coment;
    TextView matching_rink;

    private static final String TAG_RESULTS = "result";
    private static final String TAG_MATCHING_COUNT = "matching_count";
    private static final String TAG_MATCHING_TITLE = "matching_title";
    private static final String TAG_MATCHING_TOPIC = "matching_topic";
    private static final String TAG_MATCHING_PEOPLE = "matching_people";
    private static final String TAG_MATCHING_HOUR = "matching_hour";
    private static final String TAG_MATCHING_MIN = "matching_min";
    private static final String TAG_MATCHING_RINK = "matching_rink";
    private static final String TAG_MATCHING_COMENT = "matching_coment";


    JSONArray peoples = null;

    ArrayList<HashMap<String, String>> personList;

    ListView list;
    ListAdapter adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list);
        list = (ListView) findViewById(R.id.listView);
        personList = new ArrayList<HashMap<String, String>>();
        list.setOnItemClickListener(this);
        getData("http://192.168.0.162/getdata1.php");


//        textView = (TextView)findViewById(R.id.matching_nowpeople);

    }





    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 matching_count = c.getString(TAG_MATCHING_COUNT);
                String matching_title = c.getString(TAG_MATCHING_TITLE);
                String matching_topic = c.getString(TAG_MATCHING_TOPIC);
                String matching_people = c.getString(TAG_MATCHING_PEOPLE);
                String matching_hour = c.getString(TAG_MATCHING_HOUR);
                String matching_min = c.getString(TAG_MATCHING_MIN);
                String matching_rink = c.getString(TAG_MATCHING_RINK);
                String matching_coment = c.getString(TAG_MATCHING_COMENT);


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

                persons.put(TAG_MATCHING_COUNT, matching_count);
                persons.put(TAG_MATCHING_TITLE, matching_title);
                persons.put(TAG_MATCHING_TOPIC, matching_topic);
                persons.put(TAG_MATCHING_PEOPLE, matching_people);
                persons.put(TAG_MATCHING_HOUR, matching_hour);
                persons.put(TAG_MATCHING_MIN, matching_min);
                persons.put(TAG_MATCHING_RINK, matching_rink);
                persons.put(TAG_MATCHING_COMENT, matching_coment);


                personList.add(persons);


            }

            adapter = new SimpleAdapter(list.this, personList, R.layout.list_item,
                    new String[]{TAG_MATCHING_COUNT, TAG_MATCHING_TITLE, TAG_MATCHING_TOPIC, TAG_MATCHING_PEOPLE, TAG_MATCHING_HOUR, TAG_MATCHING_MIN, TAG_MATCHING_RINK, TAG_MATCHING_COMENT},
                    new int[]{R.id.matching_count, R.id.matching_title, R.id.matching_topic, R.id.matching_people, R.id.matching_hour, R.id.matching_min, R.id.matching_rink, R.id.matching_coment});

            list.setAdapter(adapter);


        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

위에 첨부안된 소스 코드입니당..
큰수 (160 포인트) 님이 2016년 11월 16일 답변
public void getData(String url) {
        class GetDataJSON extends AsyncTask<String, Void, String> {

            @Override
            protected String doInBackground(String... params) {

                String uri = params[0];

                BufferedReader bufferedReader = null;
                try {
                    URL url = new URL(uri);
                    HttpURLConnection con = (HttpURLConnection) url.openConnection();
                    StringBuilder sb = new StringBuilder();

                    bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));

                    String json;
                    while ((json = bufferedReader.readLine()) != null) {
                        sb.append(json + "\n");
                    }

                    return sb.toString().trim();

                } catch (Exception e) {
                    return null;
                }


            }

            @Override
            protected void onPostExecute(String result) {
                myJSON = result;
                showList();
            }
        }
        GetDataJSON g = new GetDataJSON();
        g.execute(url);
    }

    @Override
    public void onItemClick(AdapterView<?> parent, final View view, final int position, long id) {
        AlertDialog.Builder alert = new AlertDialog.Builder(list.this);
        // 알림창 띄움
        alert.setTitle("선택한 매칭");
        // 클릭된 아이템 위치, 아이템명 출력
        alert.setMessage("매칭에 참여 하시겠습니까?");
        alert.setPositiveButton("확인", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                textView = (TextView)findViewById(R.id.matching_nowpeople);
                matching_title = (TextView)findViewById(R.id.matching_title);
                matching_topic = (TextView)findViewById(R.id.matching_topic);
                matching_nowpeople = (TextView)findViewById(R.id.matching_nowpeople);
                matching_people = (TextView)findViewById(R.id.matching_people);
                matching_hour= (TextView)findViewById(R.id.matching_hour);
                matching_min = (TextView)findViewById(R.id.matching_min);
                matching_coment = (TextView)findViewById(R.id.matching_coment);
                matching_rink = (TextView)findViewById(R.id.matching_rink);

                //count++;
                //count = Integer.parseInt((textView.getText()+""));
                count++;
                        textView.setText(count+"");
                Intent intent = new Intent(getApplicationContext(), join2.class);
                intent.putExtra("title",matching_title.getText().toString());
                intent.putExtra("topic",matching_topic.getText().toString());
                intent.putExtra("nowpeople",matching_nowpeople.getText().toString());
                intent.putExtra("people",matching_people.getText().toString());
                intent.putExtra("hour",matching_hour.getText().toString());
                intent.putExtra("min",matching_min.getText().toString());
                intent.putExtra("coment",matching_coment.getText().toString());
                intent.putExtra("rink",matching_rink.getText().toString());

                startActivity(intent);

            }
        });
        alert.setNegativeButton("취소", null);
        alert.show();
    }
}
한번에 안올라가서 나눠서 올립니당.. 죄송해요 답을 꼭 얻고싶습니다
0 추천

글이 너무 많아서 핵심부분만 봤습니다.

도움이 될련지 모르겠네요.

리스트 아이템 클릭이벤트를 클릭했을때 onItemClick 함수 3번쨰 파라미터가 리스트 아이템의 인덱스입니다.

이 값으로 리스트 아이템을 구분하시면 됩니다.

Development Guy (70,570 포인트) 님이 2016년 11월 16일 답변
...