본문 바로가기

open coding

Custom Adapter - open

반응형

package com.example.customadapter;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ContentProviderClient;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    //list 항목에 쓸 문자열
    String[] data = {"data1", "data2","data3","data4","data5","data6"};

    // define variables
    ListView list1;     //main.xml의 listview 연결예정
    TextView text1;     //main.xml의 textview 연결예정

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

        //connect to xml id
        list1 = findViewById(R.id.listview1);
        text1 = findViewById(R.id.textView2);

        //만든 class ListAdapter setting  (연결 to main.xml)
        ListAdapter adapter = new ListAdapter();
        list1.setAdapter(adapter);
    }
//@onCreat{} finish

    //class adapter setting - row.xml 과 연결.
    class ListAdapter extends BaseAdapter{

        //리스너도 연결
        BtnListener listener = new BtnListener();

        // listView의 항목갯수
        @Override
        public int getCount() {
            return data.length;
        }
        //
        @Override
        public Object getItem(int position) {
            return null;
        }

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

        @Override       //row.xml view 구성연결
        public View getView(int position, View convertView, ViewGroup parent) {
            //재사용 가능한 뷰(convertView)가 없다면, 뷰를 만든다.
            if(convertView == null){
                LayoutInflater inflater = getLayoutInflater();          //row layout에 연결
                convertView = inflater.inflate(R.layout.row,null);
            }
            //뷰를 구성한다.
            TextView sub_text = convertView.findViewById(R.id.textview1);   //row textview연결


            Button sub_btn1 = convertView.findViewById(R.id.button1);   //버튼에 리스너 연결
            Button sub_btn2 = convertView.findViewById(R.id.button2);

            sub_btn1.setOnClickListener(listener);
            sub_btn2.setOnClickListener(listener);

            sub_btn1.setTag(position);      //버튼에 인덱스 값 저장 (tag이용)
            sub_btn2.setTag(position);

            sub_text.setText(data[position]);

            //뷰를 반환한다.
            return convertView;
        }

    }
//class adapter finish

    //버튼 클릭시, 셋팅할 리스터
    class BtnListener implements View.OnClickListener{
        @Override
        public void onClick(View v) {
            //리스트의 인덱스값 추출
            int position = (Integer)v.getTag();         //(tag이용)

            // button id추출
            int id = v.getId();

            switch (id){
                case R.id.button1 :
                    text1.setText("clicked fist button" + position);
                    break;
                case R.id.button2 :
                    text1.setText("clicked second button" + position);
                    break;
            }
        }
    }
// class 리스너 finish

}