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

getView에 다이얼로그 띄우기

0 추천
package com.example.colorselect;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;


public class MainActivity extends AppCompatActivity {
    private GridView color2019gv;
    private Color2019Adapter Adapter2019;
    private List<Color2019> color2019List;

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

        color2019gv = (GridView)findViewById(R.id.color2019gv);
        color2019List = new ArrayList<Color2019>();
        Adapter2019 = new Color2019Adapter(getApplicationContext(), color2019List);
        color2019gv.setAdapter(Adapter2019);
        color2019gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Log.d("log", "클릭");

            }
        });

        new BackgroundTask().execute();

    }


    class BackgroundTask extends AsyncTask<Void, Void, String>
    {

        String target;
        @Override
        protected void onPreExecute() {
            target = "http://wngus457.cafe24.com/wngusdb/Trend2019.php";
        }

        @Override
        protected String doInBackground(Void... voids) {
            try{
                Log.d("Try", "doInbackground실행");
                URL url = new URL(target);
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                InputStream inputStream = httpURLConnection.getInputStream();
                Log.d("Try", "inputstream");
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                Log.d("Try", "bufferedreader");

                String temp;
                StringBuilder stringBuilder = new StringBuilder();
                while ((temp = bufferedReader.readLine()) != null){
                    stringBuilder.append(temp + "\n");
                }
                bufferedReader.close();
                inputStream.close();
                httpURLConnection.disconnect();
                return stringBuilder.toString().trim();


            }
            catch (Exception e){
                Log.d("Try", "doInbackground catch실행");
                e.printStackTrace();
            }
            Adapter2019.notifyDataSetChanged();

            return null;
        }
        @Override
        public void onProgressUpdate(Void... values){
            super.onProgressUpdate();
        }
        @Override
        public void onPostExecute(String result){
            try{
                Log.d("Try", "onPostExecute실행");

                JSONObject jsonObject = new JSONObject(result);
                JSONArray jsonArray = jsonObject.getJSONArray("response");
                int count = 0;
                String colorCode, colorName, colorNameEn;
                while(count < jsonArray.length()){
                    JSONObject object = jsonArray.getJSONObject(count);
                    colorCode = object.getString("colorCode");
                    colorName = object.getString("colorName");
                    colorNameEn = object.getString("colorNameEn");
                    Color2019 color2019 = new Color2019(colorCode, colorName, colorNameEn);
                    color2019List.add(color2019);
                    Adapter2019.notifyDataSetChanged();
                    count++;
                }
            }
            catch (Exception e){
                Log.d("Try", "onPostExecute catch실행");

                e.printStackTrace();
            }
        }
    }
}

package com.example.colorselect;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.List;

public class Color2019Adapter extends BaseAdapter {
    protected ColorDialog colorDialog;
    private Context context;
    private List<Color2019> color2019list;

    public Color2019Adapter(Context context, List<Color2019> color2019list) {
        this.context = context;
        this.color2019list = color2019list;
    }

    @Override
    public int getCount() {
        return color2019list.size();
    }

    @Override
    public Object getItem(int i) {
        return color2019list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(final int i, View view, final ViewGroup viewGroup) {
        final View v = View.inflate(context, R.layout.trend_2019, null);
        TextView colorName = (TextView)v.findViewById(R.id.colorName);
        TextView colorNameEn = (TextView)v.findViewById(R.id.colorNameEn);
        TextView colorCode = (TextView)v.findViewById(R.id.colorCode);

        colorCode.setBackgroundColor(Color.parseColor(color2019list.get(i).getColorCode()));
        colorName.setText(color2019list.get(i).getColorName());
        colorName.setBackgroundColor(Color.parseColor(color2019list.get(i).getColorCode())); //텍스트 배경색도 같이 배경컬러로 변경
        colorNameEn.setText(color2019list.get(i).getColorNameEn());
        colorNameEn.setBackgroundColor(Color.parseColor(color2019list.get(i).getColorCode())); //텍스트 배경색도 같이 배경컬러로 변경

        v.setTag(color2019list.get(i).getColorCode());

        return v;
    }
}

 

데이터베이스에서 컬러 코드를 받아서 적용시키는 방식으로 만든 앱인데 각 그리드 뷰를 클릭할 때마다 해당 색상이 보여지는 다이얼로그를 출력하고 싶은데 어디다 넣어야 할지 모르겠네요ㅠ 도와주세요!!

wngus457 (180 포인트) 님이 2019년 7월 24일 질문

1개의 답변

0 추천
Adapter 에서 구현하셔야 할 것같네요. getView() 에서 view 에게 click 이벤트를 달아보세요. log 를 남겨 정상적으로 아이템 선택이 된다는것이 보여지면 각각의 아이템에 따른 색상을 다이어로그로 띄워주면 됩니다.
융슈비 (1,280 포인트) 님이 2019년 7월 30일 답변
getView()에서 view에게 클릭 이벤트를 넣고 다이얼로그를 출력해야하는데 다이얼로그 AlertDialog.Builder dlg = new AlertDialog.Builder(this); 이렇게 하면 빨간줄이 뜨는데 저 this부분을 어떻게 처리해야 하는건가요?
...