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

custom listview random질문

0 추천
package org.techtown.todolist;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import java.util.Random;

public class DetailActivity extends AppCompatActivity {

    ListView testLv;
    MyAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);
        testLv = findViewById(R.id.test_lv);

        adapter = new MyAdapter(this);

        testLv.setAdapter(adapter);



        findViewById(R.id.test_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(DetailActivity.this, DetailTestActivity.class));
            }
        });
    }

    class MyHolder {
        TextView engTv;
        TextView korTv;

    }

    class MyAdapter extends ArrayAdapter {
        LayoutInflater lnf;

        public MyAdapter(Activity context) {
            super(context, R.layout.item, Storage2.vocaArr);
            lnf = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        Random rd = new Random();

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return Storage2.vocaArr.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return Storage2.vocaArr.get(position);
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            MyHolder viewHolder;
            if (convertView == null) {

                convertView = lnf.inflate(R.layout.item, parent, false);
                viewHolder = new MyHolder();
                viewHolder.engTv = convertView.findViewById(R.id.eng_tv);
                viewHolder.korTv = convertView.findViewById(R.id.kor_tv);


                convertView.setTag(viewHolder);
            } else {
                viewHolder = (MyHolder) convertView.getTag();
            }

            viewHolder.engTv.setText(Storage2.vocaArr.get(position).eng);
            viewHolder.korTv.setText(Storage2.vocaArr.get(position).kor);

            return convertView;
        }
    }
}
 
custom listview에서 랜덤으로 5개 단어씩 출력하려고 하는데 어느부분에 해야되나요 이것저것해보니까 잘안되네요
kmk3907 (120 포인트) 님이 2021년 7월 19일 질문
Adpater에서 storage를 엑세스 하면 코드의 종속성이 심해서 나중에 수정사항이 생기면 고치는데 애를 먹습니다. storage에서 읽어온 데이터만 adapter에 넘기세요.
그리고 Adapter에서 Activity를 생성자에 받는 부분도 제거하시는게 좋습니다. 그냥 onCreateViewHolder에서 LayouInflater.from(parent.context)로 해서 사용하시면 됩니다.

1개의 답변

0 추천
DetailActivity 에서 랜덤으로 단어를 5개 생성하신 다음(별도의 클래스에서 백그라운드로 처리하시는 걸 추천합니다.) 이걸Adapter에 넘겨주시고 아이템의 사이즈가 adapter 에 있는 것과 같으면 notfiyItemRangeChanged 다르면 notifyDataSetchanged 메소드를 호출하시면 됩니다. notify* 메소드를 손대기 싫으시면 ListAdapter사용하시면 됩니다.

더 자세한 내용은 개발자 문서를 참조하세요.

https://developer.android.com/reference/androidx/recyclerview/widget/RecyclerView.Adapter
https://developer.android.com/reference/androidx/recyclerview/widget/ListAdapter
spark (224,800 포인트) 님이 2021년 7월 19일 답변
저는 당연히 RecyclerView.Adapter를 사용하시는 줄 알았네요. RecyclerView.Adapter를추천하지만, 안쓰실 거면 안쓰셔도 되는데, 랜덤데이터 만드는 부분은 제 코멘트와 동일하게 처리하시면 됩니다.
...