티스토리 뷰
github.com/Sienna94/AndroidReview
Sienna94/AndroidReview
안드로이드 로그인 get방식 리뷰. Contribute to Sienna94/AndroidReview development by creating an account on GitHub.
github.com
먼저 제품 이미지 출력을 위한 글라이드를 설치한다.
app의 build.gradle에 다음 코드를 붙여넣고 sync해준다.
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
...
implementation 'com.github.bumptech.glide:glide:3.7.0'
}
item.xml에는 제품의 이미지가 들어갈 ImageView를 만들어준다.
이후 MyListActivity에서 list에 출력될 ItemData 클래스를 가져오고
glide를 이용해서 바꿔줄 pimg(item.xml), listview인 LvMain,
listview와 item.xml을 연결해줄 MyAdapter를 전역에 선언해준다.
여기서 adapter가 setAdapter, notifyDataSetChanged의 위치가 중요한데,
response를 arr에 추가해준뒤,
notifyDataSetChanged로 arr의 data 변경을 반영하고!
그 이후에 onCreate로 다시 돌아와서 변경사항을 반영하여 SetAdapter로 보여준다.
마지막으로 글라이드를 사용해서 pimg를 변경해주기만 하면 된다.
다음과 같이 작성한다.
다음과 같이 잘 출력되는 걸 확인할 수 있다.
...
public class MyListActivity extends AppCompatActivity {
ArrayList<ItemData> arr = new ArrayList<>();
ImageView iv;
ImageView pimg;
ListView lvMain;
MyAdapter adapter; //전역에서 안쓰면 못 불러옴.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_list);
iv=findViewById(R.id.iv_title);
pimg=findViewById(R.id.iv_pimage);
lvMain = findViewById(R.id.lv1);
//post방식으로 받아오기//
RequestQueue stringRequest = Volley.newRequestQueue(this);
String url = "http://192.168.7.26:8180/oop/androidProductList.do";
StringRequest myReq = new StringRequest(Request.Method.POST, url,
successListener, errorListener);
myReq.setRetryPolicy(new DefaultRetryPolicy(3000, 0, 1f)
);
stringRequest.add(myReq);
adapter = new MyAdapter(this);
lvMain.setAdapter(adapter);
...
});
}
...
Response.ErrorListener errorListener = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("prolist", "제품리스트 실패");
}
};
Response.Listener<String> successListener = new Response.Listener<String>() {
//가져온 jsonArray 리스트뷰로 나타내기
@Override
public void onResponse(String response) {
try {
JSONArray proArr = new JSONArray(response);
for (int i = 0; i < 10; i++) {
JSONObject proObj = proArr.getJSONObject(i);
String pN = proObj.getString("pname");
String pI = proObj.getString("pimage1");
String pC = proObj.getString("pcontent");
//리스트에 보여줄 어레이에 추가
arr.add(i, new ItemData(pN, pI, pC));
Log.d("arr", arr.get(i).pName);
}
//데이터가 바꼈으니까 여기서 arr 변화를 notifychange해준다!
adapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
};
//리스트 관련
class ItemHolder {
TextView tvPnameHolder;
ImageView ivPimage1Holder;
TextView tvPcontentHolder;
}
class MyAdapter extends ArrayAdapter{
LayoutInflater lnf;
public MyAdapter(Activity context) {
super(context, R.layout.item, arr);
lnf = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return arr.size();
}
@Override
public Object getItem(int position) {
return arr.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ItemHolder viewHolder;
if(convertView == null){
convertView = lnf.inflate(R.layout.item, parent, false);
viewHolder = new ItemHolder();
viewHolder.tvPnameHolder = convertView.findViewById(R.id.tv_pname);
viewHolder.tvPcontentHolder = convertView.findViewById(R.id.tv_pcontent);
viewHolder.ivPimage1Holder = convertView.findViewById(R.id.iv_pimage);
convertView.setTag(viewHolder);
}else{
viewHolder = (ItemHolder) convertView.getTag();
}
viewHolder.tvPnameHolder.setText(arr.get(position).pName);
viewHolder.tvPcontentHolder.setText(arr.get(position).pContent);
//제품 사진도 바꿔줌
Glide.with(MyListActivity.this)
.load("http://192.168.7.26:8180/oop/img/shoes/"+arr.get(position).pImage1)
.into(viewHolder.ivPimage1Holder);
Log.d("img", "http://192.168.7.26:8180/oop/img/shoes/"+arr.get(position).pImage1);
return convertView;
}
}
}
'ANDROID' 카테고리의 다른 글
댓글 입력, 삭제, 수정 시 변화 반영하여 화면 이동 없이 리스트 출력 (notifyDataSetChanged 위치/ position 변수 위치/private일 때는 set으로! public일 때는 get으로!) (0) | 2021.01.05 |
---|---|
refreshListener 참고 (0) | 2020.12.31 |
왜 arr에 담긴 애들이 Listview에 출력이 안됐을까? (전역변수 설정) (0) | 2020.12.31 |
왜 계속 같은 proObject만 proArr에 들어갔는가?! (primitive type/ reference type) (0) | 2020.12.31 |
list에서 필요한 것만 뽑아쓰기 (0) | 2020.12.30 |
댓글