본문 바로가기
Android

Adapter View

by noddu 2021. 3. 24.
728x90
반응형

어뎁터 뷰 종류

 

 

어뎁터 뷰  생성 순서

 

1. ListView 만들기

 

 

 

 

 

2. ListView를 만들고 array adapter를 사용하기위해

Root element를 TextView로 설정한다

 

 

 

 

 

 

 

 

public class MainActivity extends AppCompatActivity {
    // 리스트 뷰 안에 들어갈 데이터를 생성 -> 추가 삭제가 자유로운 ArrayList를 사용하여 생성
    // ArrayList 하나 생성해서 우리 팀원들 이름 저장하기
    ArrayList<String> team = new ArrayList<>();
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        team.add("장승원");
        team.add("여진호");
        team.add("김민관");
        team.add("박양주");
        team.add("김명훈");
        
    }
}

3. arrayList로 데이터 정의하기

 

 

 

 

 

public class MainActivity extends AppCompatActivity {
    // 리스트 뷰 안에 들어갈 데이터를 생성 -> 추가 삭제가 자유로운 ArrayList를 사용하여 생성
    // ArrayList 하나 생성해서 우리 팀원들 이름 저장하기
    ArrayList<String> team = new ArrayList<>();
    ListView lv;
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        lv = findViewById(R.id.listView);
        
        team.add("장승원");
        team.add("여진호");
        team.add("김민관");
        team.add("박양주");
        team.add("김명훈");
        
        // Adapter 생성
        // Adapter 의 역할은 simpleList.xml (항목 디자인, 템플릿) 과 ArrayList(데이터)를 결합해서
        // ListView 에 차곡차곡 쌓아주는 일을 함
        
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.simplelist, team);
        //1.현재페이지 정보(context) , simplelist.xml(항목디자인,템플릿) -> R.layout 으로 접근 , 보여질 데이터
        
        lv.setAdapter(adapter);
    }
}

5.adapter생성해서 listView에 지정하기

 

textSize나 공백설정은 simplelist.xml에서해야함

( activity_main.xml은 layout만 제공해주는것 뿐임 )

 

 

 

 

 

 

 btn_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 추가버튼 눌렀을 때 listView에 데이터 추가하기
                String str = edt_input.getText().toString();


                //데이터가 담겨있는 ArrayList에 추가하기
                team.add(str);

                // 데이터가 바뀌어서 adapter 를 새로고침
                adapter.notifyDataSetChanged();

                //EditText에 적힌 글자 날리기
                edt_input.setText("");
            }
        });

추가할 텍스트 적고 추가버튼 누르면 list에 추가하기

 

Layout에서 transcriptMode를 alwayScroll로 설정해두면 추가할때마다 스크롤이 자동으로 올라간다

 

 

 

 

public class MainActivity extends AppCompatActivity {
    // 리스트 뷰 안에 들어갈 데이터를 생성 -> 추가 삭제가 자유로운 ArrayList를 사용하여 생성
    // ArrayList 하나 생성해서 우리 팀원들 이름 저장하기
    ArrayList<String> team = new ArrayList<>();
    ListView lv;
    EditText edt_input;
    Button btn_add;


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

        lv = findViewById(R.id.listView);
        edt_input = findViewById(R.id.edt_input);
        btn_add = findViewById(R.id.btn_add);

        team.add("장승원");
        team.add("여진호");
        team.add("김민관");
        team.add("박양주");
        team.add("김명훈");

        // Adapter 생성
        // Adapter 의 역할은 simpleList.xml (항목 디자인, 템플릿) 과 ArrayList(데이터)를 결합해서
        // ListView 에 차곡차곡 쌓아주는 일을 함

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.simplelist, team);
        //1.현재페이지 정보(context) , simplelist.xml(항목디자인,템플릿) -> R.layout 으로 접근 , 보여질 데이터

        lv.setAdapter(adapter);

        btn_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 추가버튼 눌렀을 때 listView에 데이터 추가하기
                String str = edt_input.getText().toString();


                //데이터가 담겨있는 ArrayList에 추가하기
                team.add(str);

                // 데이터가 바뀌어서 adapter 를 새로고침
                adapter.notifyDataSetChanged();

                //EditText에 적힌 글자 날리기
                edt_input.setText("");
            }
        });

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // 지우기

                // 다이얼로그 띄우기
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("삭제하기");
                builder.setMessage("ㄹㅇ 삭제 할거??");
                builder.setPositiveButton("yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        team.remove(position);  // 이벤트가 발생한 position 번호 쪽 삭제
                        adapter.notifyDataSetChanged(); // 새로고침
                    }
                });
                builder.setNegativeButton("cancle", null);
                builder.show();
            }
        });
    }
}

최종 코드

 

 

 

 

 

public class MainActivity extends AppCompatActivity {


    Button btn_login, btn_write;
    TextView tv_result;
    ListView lv;

    final  int WRITE = 2; //상수는 변수와 구분짓기위해 대문자로 적기!

    ArrayList<String> board = new ArrayList<>(); // ListView 에 띄울 데이터
    ArrayAdapter<String> adapter;

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


        btn_write = findViewById(R.id.btn_write);
        lv = findViewById(R.id.listView);
        adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.simplelist, board);


        btn_write.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivityForResult(new Intent(MainActivity.this, BoardActivity.class), WRITE);
                lv.setAdapter(adapter);
                //  ▲ 한번만 쓸거라서 변수에저장하지 않고 한번에 작성
            }
        });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == this.LOGIN){  //sub 갔다가 잘 왔는지?
            if(resultCode == RESULT_OK){    //성공여부
                btn_write.setEnabled(true);
            }

        }else if(requestCode == WRITE){
            if(resultCode == RESULT_OK){
                board.add(data.getStringExtra("msg"));
                adapter.notifyDataSetChanged();
            }
        }

    }
}


변수명 적용된 곳 한번에 바꾸기 단축키 (Eclipse)

Alt + Shift + R

 

로그인 할때만 btn_write.setEnalbed(true)하고

버튼 속성에서 enabled를 false로 해놓으면

로그인 하지않았을때에는 글 작성 하지 못하게 한다.

반응형

'Android' 카테고리의 다른 글

Custom ListView + DB연동하기 ( SQLite )  (0) 2021.04.03
Adapter -> Custom ListView활용  (0) 2021.03.25
Intent 사용 2  (0) 2021.03.23
Intent 사용하기  (0) 2021.03.22
Constraint Layout + 주사위게임 만들기  (0) 2021.03.21