안드로이드 listview 관련 질문입니다.

조회수 3453회

안녕하세요. 많이 부족한 개발자입니다 ㅠㅠ 조금 이해가 안가는 부분이 있어서 이렇게 질문을 올립니다. listview에서 포지션 인식이 안되서 이렇게 올립니다 소스가 조금 길더라도 이해해주세요 ㅠㅠ 먼저 listview가 있는 화면에서 intent를 넘깁니다!

 @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Intent intent = new Intent(this, store_space.class);
        intent.putExtra("position", position);
        startActivity(intent);

네 그리고 나서 받는 곳 소스입니다. 제가 구글 스프레드시트로 해서 position값을 받고 있습니다. 혹시 참고원하시면 여기 링크 봐주시면 감사하겠습니다 https://docs.google.com/spreadsheets/d/18CYJ-2Xo4Prundk5Rp6PsPrxFXYzD56ybSioPT2XG-8/edit 네 그런데 포지션 값이 0부터 잘 들어오는데 listview 아무거나 눌러도 13번 포지션 값만 들어옵니다 그래서 이렇게 질문을 올립니다

  private ArrayList<store_itemInfo> results = new ArrayList<>();
    private int mPosition = 0;
    private TextView source, title, address, explain;
    private ImageView imageview, imageview1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.store_space);
        mPosition = getIntent().getIntExtra("position", 0);
        source = (TextView) findViewById(R.id.store_space_Text_Source);
        title = (TextView) findViewById(R.id.store_space_Text_Title);
        address = (TextView) findViewById(R.id.store_space_Text_Address);
        explain = (TextView) findViewById(R.id.store_space_Text_Explain);
        imageview = (ImageView) findViewById(R.id.store_space_ImageView);
        imageview1 = (ImageView) findViewById(R.id.store_space_ImageView1);
        new AsyncHttpTask().execute();
//        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
//        fab.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
//                        .setAction("Action", null).show();
//            }
//        });
    }
    public class AsyncHttpTask extends AsyncTask<String, Void, String> {
        HttpURLConnection urlConnection;
        StringBuilder result;
        ProgressDialog asyncDialog = new ProgressDialog(
                store_space.this);

        @Override
        protected void onPreExecute() {
            asyncDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            asyncDialog.setMessage("로딩중입니다..");

            // show dialog
            asyncDialog.show();
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... params) {
            result = new StringBuilder();
            urlConnection = null;

            try {
                URL url = new URL("https://script.google.com/macros/s/AKfycby39ckxtMJ_fupsVFO2-AueX1eImiMA-C25srnn0WTKoNJlPKaW/exec");
                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.connect();
                InputStream in = new BufferedInputStream(urlConnection.getInputStream());
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                String line;
                String result = "";
                while ((line = reader.readLine()) != null) {
                    result += line;
                }
                // Close stream
                if (null != in) {
                    in.close();
                }
                return result;

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                assert urlConnection != null;
                urlConnection.disconnect();
            }
            return result.toString();
        }


        @Override
        protected void onPostExecute(String result) {
            // Download complete. Lets update UI
            parseResult(result);
            asyncDialog.dismiss();
        }

        private void parseResult(String result) {
            try {
                if (null != results) {
                    results = new ArrayList<store_itemInfo>();
                }
                JSONArray response = new JSONArray(result);
                for (int i = 0; i < response.length(); i++) {
                    store_itemInfo temp = new store_itemInfo();
                    temp.setTitle(response.getJSONObject(i).getString("title"));
                    temp.setImage(response.getJSONObject(i).getString("image"));
                    temp.setImage1(response.getJSONObject(i).getString("image1"));
                    temp.setPosition(response.getJSONObject(i).getInt("position"));
                    temp.setAddress(response.getJSONObject(i).getString("address"));
                    temp.setExplain(response.getJSONObject(i).getString("explain"));
                    temp.setSource(response.getJSONObject(i).getString("source"));
                    temp.setIndex(response.getJSONObject(i).getInt("index"));
                    source.setText(temp.getSource());
                    title.setText(temp.getTitle());
                    address.setText(temp.getAddress());
                    explain.setText(temp.getExplain());
                    Picasso.with(store_space.this).load(temp.getImage()).fit().into(imageview);
                    Picasso.with(store_space.this).load(temp.getImage1()).fit().into(imageview1);
                    if (mPosition == temp.getPosition())
                        results.add(temp);
                }

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

봐주셔서 매번 감사합니다!!

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 인식을 못한다는게 정확히 어떤 의미인지 모르겠네요...소스라도 첨부해주면 이해하기 쉬울거 같은데.. 알 수 없는 사용자 2016.5.31 17:02
  • 죄송합니다 ㅠㅠㅠ 다시 수정해서 올리겠습니다!! 알 수 없는 사용자 2016.6.1 00:39
  • 원하시는 동작을 하기에는 무리가 없어보이는데요...onItemclick의 position 값과 onCreate의 intent extra 의 position 값이 다르게 나오는지 로그를 찍어보셔요..동작상에 큰 문제는 없어보입니다. 알 수 없는 사용자 2016.6.1 08:58
  • 네 다 찍어봤는데 값이 잘 들어오고 있습니다 ㅠㅠ 감사합니다.. 알 수 없는 사용자 2016.6.1 13:21

1 답변

  • 질문이 잘 이해가 되지 않는데요. 동작하지 않는 부분의 코드를 올려주시면 답변에 도움이 될 것 같습니다. ListView 클릭 이벤트 처리를 살펴볼 수 있는 간단한 코드 첨부했습니다. 작업 중인 코드와 비교하면서 문제점을 찾아보는게 좋을 것 같습니다.

    public class ListActivity extends android.app.ListActivity {
    
        static final String[] FRUITS = new String[]{"사과", "바나나", "딸기",
            "코코넛", "망고", "키위", "복숭아", "참외", "수박", "올리브",
            "멜론", "토마토", "오이", "바질", "월계수", "페퍼민트", "레몬"};
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setListAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, FRUITS));
            getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Toast.makeText(ListActivity.this,
                        "Position: " + position + ", " + getListAdapter().getItem(position), Toast.LENGTH_SHORT)
                        .show();
                }
            });
        }
    }
    

    결과 화면 - 리스트에서 복숭아 클릭 시 토스트 출력

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 죄송합니다 ㅠㅠ 다시 수정해서 올리겠습니다 보고 다시 답변 부탁 드려도 될까요? 알 수 없는 사용자 2016.6.1 00:40
    • 올려주신 코드에서는 이상하게 동작할 만한 부분이 없는 것 같은데요. 문제가 mPosition 값이 항상 13으로 나오는 건가요? 알 수 없는 사용자 2016.6.1 08:27
    • 네 listview에서 클릭 할때마다 13 포지션 값이 들어옵니다 ㅠㅠ 봐주셔서 감사합니다! 알 수 없는 사용자 2016.6.1 13:21

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

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

(ಠ_ಠ)
(ಠ‿ಠ)