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

리스트뷰 랜덤으로 이미지 변화하는 법 [closed]

0 추천

커스텀 리스트뷰를 만들어 리스트모양을 만들어놨습니다.

리스트를 누르면 적용해놓은 이미지가 변화되게 해야합니다.

 

public class MainActivity extends AppCompatActivity {

    ArrayList<MyData> data;
    MyAdapter adapter;
    String strDate;
    String str;

    TextView dat_close;
    RelativeLayout dat_open;

    Random mRand;

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

        mRand = new Random();
        
        //#1. 데이터만들기...
        data = new ArrayList<MyData>();
        Button savebtn = (Button) findViewById(R.id.gil_dat_save2);
        final EditText edt = (EditText) findViewById(R.id.gil_dat_write2);

        if (savebtn != null) {
            savebtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    //날짜형식
                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd aa h:mm", java.util.Locale.getDefault());
                    Date date = new Date();
                    strDate = dateFormat.format(date);
    
                    str = edt.getText().toString();
    
                    if (str.length() != 0) {
                        
                        ImageView img = (ImageView)findViewById(R.id.gil_dat_ink);
                        data.add(new MyData(str, strDate, img));
                        adapter.notifyDataSetChanged();
                        edt.setText("");
                    } else {
                        Toast.makeText(MainActivity.this, "빈 댓글은 싫어요:(", Toast.LENGTH_LONG).show();
                    }
                }
            });
        }

        adapter = new MyAdapter(this, R.layout.gil_dat_list, data);

        //#3. 연결하기(리스트뷰, 어댑터)
        final ListView list = (ListView) findViewById(R.id.gil_dat_list);
        list.setAdapter(adapter);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                int nResult = getRandom(7, 1);

                ImageView img = (ImageView) findViewById(R.id.gil_dat_ink);
                String resName = "@drawable/ink" + nResult;
                int resID = getResources().getIdentifier(resName, "drawable", "com.example.user.dat_test");
                img.setBackgroundResource(resID);

                //str, strData의 내용도 함께 바뀜
                data.set(position, new MyData(str, strDate, img));
                adapter.notifyDataSetChanged();
                Toast.makeText(MainActivity.this, "좋아요!", Toast.LENGTH_SHORT).show();
            }
        });
    }
    
    class MyData {
        MyData(String mainText, String subText, ImageView imageRes) {
            mMainText = mainText;
            mSubText = subText;
            mImageRes = imageRes;
        }

        String mMainText;
        String mSubText;
        ImageView mImageRes;
    }

    class MyAdapter extends BaseAdapter {
        Context mContext;
        ImageView mLayoutRes;
        ArrayList<MyData> mData;

        //R은 int타입이므로 int layoutRes
        MyAdapter(Context context, ImageView layoutRes, ArrayList<MyData> data) {
            mContext = context;
            mLayoutRes = layoutRes;
            mData = data;
        }
        
        @Override
        public int getCount() {
            return mData.size(); //data4개 -> 4개생성
        }

        @Override
        public Object getItem(int position) {
            return mData.get(position);
        }

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

        @Override
        //size 4개 -> 4번호출 0~4
        public View getView(int position, View convertView, ViewGroup parent) {
            RelativeLayout rlayout;
            if (convertView == null) {
                rlayout =
                        (RelativeLayout) View.inflate(mContext, R.layout.gil_dat_list, null);
            } else {
                rlayout = (RelativeLayout) convertView;
            }

            TextView mainText = (TextView) rlayout.findViewById(R.id.gil_dat_text);
            TextView subText = (TextView) rlayout.findViewById(R.id.gil_dat_date);
            ImageView image = (ImageView) rlayout.findViewById(R.id.gil_dat_ink);

            mainText.setText(mData.get(position).mMainText);
            subText.setText(mData.get(position).mSubText);
            image.setImageResource(mData.get(position).mImageRes);
            
            return rlayout;
        }
    }
    
    public int getRandom(int max, int offset) {

        int nResult = mRand.nextInt(max) + offset;
        return nResult;
    }
}

이미지값을 저장해야하는데 image.setImageResource(mData.get(position).mImageRes);

setImageResource 는 int값만 저장할 수 있어서...

어떻게 해야할지 감이 안잡힙니다.... 힌트 좀 주세여... 

질문을 종료한 이유: 해결
엉와 (290 포인트) 님이 2016년 9월 23일 질문
엉와님이 2016년 9월 24일 closed

1개의 답변

+1 추천
 
채택된 답변
ImageView mImageRes -> int mImageRes로 사용하세요. 굳이 ImageView를 사용하실 필요가 없는 것 같아요.
model class는 UI에 종속되지 않도록 디자인하시는 것이 좋습니다. 그래야 나중에 단위 테스트하기도 편하고 유지보수도 편해집니다.
익명사용자 님이 2016년 9월 24일 답변
엉와님이 2016년 9월 24일 채택됨
int 값으로 바꾸고 Math.random으로 랜덤 돌려서 해결했어요! 감사합니다ㅎㅎ
...