○ 사용하는 이유 : 같은 액티비티에 대해 인텐트를 두 번 보내면 중복된 액티비티가 뜨게 되고 이 상태에서 시스템의 [뒤로가기] 버튼을 누르면 아래에 있던 액티비티가 나타난다. 플래그를 이용하면 중복된 액티비티가 띄어지는 것을 막을 수 있다.

 

◎액티비티가 처리되는 방식

 

①액티비티 매니저 라는 객체에 의해 '액티비티 스택'이라는 것으로 관리

②스택에 액티비티를 쌓아두다가 가장 상위에 있던 액티비티가 없어지면 이전의 액티비티가 다시 화면에 보임

③새로운 액티비티가 화면에 띄어지면 기존에 있는 액티비티들은 뒤에 가러져 있는 상황임.

④플래그를 사용하지 않아 동일한 액티비티가 여러개의 스택에 쌓이면 리소스 낭비를 불러 일으킬 수 있음.

 

◎대표적인 플래그

①FLAG_ACTIVITY_SINGLE_TOP 액티비티를 생성할 때 이미 생성된 액티비티가 있으면 그 액티비티를 그대로 사용
②FLAG_ACTIVITY_NO_HISTORY 처음 이후에 실행된 액티비티는 액티비티 스택에 추가되지 않음
③FLAG_ACTIVITY_CLEAR_TOP 이 액티비티 위에 있는 다른 액티비티를 모두 종료시킴.

'For developer > Android' 카테고리의 다른 글

(Android)my26_listview,리스트뷰  (0) 2020.06.01
(Android)my20_fragment1,my21_fragment2  (0) 2020.05.27
(Android)my19_animation  (0) 2020.05.27
(Android)my17_orientation,my18_orientation2(정리x)  (0) 2020.05.27
(Android)my16_progress  (0) 2020.05.27

리스트란? 일반적으로 여러 개의 아이템 중 하나를 선택할 수 있는 세로 모양으로 된 화면 컨트롤을 말한다.

 

위젯은 선택 위젯과 일반 위젯으로 나눌 수 있는데 그 차이는 어뎁터 패턴을 사용하는 것을 선택 위젯이라고 한다. 선택 위젯에 데이터를 넣을 때 위젯이 아닌 어뎁터에 설정 해야 한다. 화면에 보이는 뷰도 어뎁터에서 만든다.
대표적인 선택 위젯은 리스트 뷰 이다.

 


※어댑터 : 보여지는 View와 그 View에 올릴 Data를 연결하는 다리 역할을 한다.

 

ArrayAdapter란?

ArrayAdapter는 배열과 어댑터 뷰를 연결하는 클래스입니다. 여기서 배열은 어댑터 뷰가 화면으로 보여줄 자료들의 집합

선택 위젯이란? 여러 개의 아이템 중에 하나를 선택할 수 있는 리스트 모양의 위젯

 

 

 

리스트뷰에 리스트에 담겨진 데이터들을 출력한 예제 이다.

 

①Arraylis인 list에 데이터들을 추가한다.

ArrayList<String> list = new ArrayList<>();
        
        list.add("바나나");
        list.add("딸기");
        list.add("수박");
        list.add("사과");
        list.add("오렌지");
        list.add("망고");
        list.add("키위");
        list.add("포도");
        list.add("멜론");
        list.add("두리안");
        list.add("바나나");

 

 

②ArrayAdapter 객체를 생성하여 기본 sdk에 내장된 android.R.layout.simple_list_item_1에 list를 넣어야 한다.

데이터를 전달 받은 adapter를 listview에 보내고 listView에 있는 아이템을 클릭시 발생되는 이벤트를 설정해 준다.

final ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,list);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                /*
                parnet->mainactivity
                position -> list 인덱스
                 */
             String selected_item = (String) parent.getItemAtPosition(position);
             textView.setText(selected_item);
           //  adapter.getPosition()
            }
        });

 

-전체 코드-

더보기

-Mainactivity.java-

package com.example.my26_listview;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    TextView textView;
    ListView listView;

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

        textView = findViewById(R.id.textView);
        listView = findViewById(R.id.listView);

        ArrayList<String> list = new ArrayList<>();

        final ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,list);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                /*
                parnet->mainactivity
                position -> list 인덱스
                 */
             String selected_item = (String) parent.getItemAtPosition(position);
             textView.setText(selected_item);
           //  adapter.getPosition()
            }
        });

        list.add("바나나");
        list.add("딸기");
        list.add("수박");
        list.add("사과");
        list.add("오렌지");
        list.add("망고");
        list.add("키위");
        list.add("포도");
        list.add("멜론");
        list.add("두리안");
        list.add("바나나");




    }
}

-activity_main.xml-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_blue_bright"
        android:text="아래목록에서 선택하세요"
        android:gravity="center"/>

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:listSelector="@android:color/holo_green_light"/>
    <!-- 눌렷을 때 색 변경 -->


</LinearLayout>

'For developer > Android' 카테고리의 다른 글

(Android)Flag  (0) 2020.06.03
(Android)my20_fragment1,my21_fragment2  (0) 2020.05.27
(Android)my19_animation  (0) 2020.05.27
(Android)my17_orientation,my18_orientation2(정리x)  (0) 2020.05.27
(Android)my16_progress  (0) 2020.05.27

'For developer > Android' 카테고리의 다른 글

(Android)Flag  (0) 2020.06.03
(Android)my26_listview,리스트뷰  (0) 2020.06.01
(Android)my19_animation  (0) 2020.05.27
(Android)my17_orientation,my18_orientation2(정리x)  (0) 2020.05.27
(Android)my16_progress  (0) 2020.05.27

 

더보기

-MainActivity.java-

package com.example.my19_animation;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    TextView textView;
    Button button;
    Animation flowAim;

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

        textView = findViewById(R.id.textView);
        button = findViewById(R.id.button);
        flowAim = AnimationUtils.loadAnimation(this,R.anim.flow);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textView.startAnimation(flowAim);
            }
        });


    }
}

-flow.xml-

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="100%"
        android:toXDelta="0%"
        android:duration="1500"
        android:repeatCount="1"/>   <!--1을 입력하면 1번더 반복!-->
</set>

'For developer > Android' 카테고리의 다른 글

(Android)my26_listview,리스트뷰  (0) 2020.06.01
(Android)my20_fragment1,my21_fragment2  (0) 2020.05.27
(Android)my17_orientation,my18_orientation2(정리x)  (0) 2020.05.27
(Android)my16_progress  (0) 2020.05.27
(Android)my15_touchevent  (0) 2020.05.27
더보기
package com.example.my17_orientation;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    String name;
    EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        showToast("onCreate() 호출됨");

        editText = findViewById(R.id.editText);
        Button button1 = findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                name = editText.getText().toString();
                showToast("입력된 값을 변수에 저장하였습니다.");
            }
        });

        if(savedInstanceState != null){
            name = savedInstanceState.getString("name");
            showToast("값을 복원하였습니다 : "+name);
        }
    }

    private void showToast(String str) {
        Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);    //번들:데이터 저장
        outState.putString("name", name);
    }

    @Override
    protected void onStart() {
        super.onStart();
        showToast("onStart() 호출됨");
    }

    @Override
    protected void onStop() {
        super.onStop();
        showToast("onStop() 호출됨");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        showToast("onDestroy() 호출됨");
    }
}

'For developer > Android' 카테고리의 다른 글

(Android)my20_fragment1,my21_fragment2  (0) 2020.05.27
(Android)my19_animation  (0) 2020.05.27
(Android)my16_progress  (0) 2020.05.27
(Android)my15_touchevent  (0) 2020.05.27
(Android)my14_smsservice  (0) 2020.05.27

 

더보기

-MainActivity.java-

package com.example.my16_progress;

import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    ProgressBar progressBar;
    EditText editText;
    Button button1,button2,button3;
    ProgressDialog dialog;
    SeekBar seekBar;

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

        progressBar = findViewById(R.id.progressBar);
        progressBar.setIndeterminate(false);    //값을 정해놀거냐?
        progressBar.setMax(100);    //최댓값 지정
        progressBar.setProgress(20);    //초기 보여주는 값
        editText = findViewById(R.id.editText);
        button1 = findViewById(R.id.button1);

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(editText.getText().toString().length()!=0){
                    int value = Integer.parseInt(editText.getText().toString());
                    if(value > 100){
                        value = 100;
                    }
                    progressBar.setProgress(value);
                }else{
                    Toast.makeText(MainActivity.this, "숫자를 입력해 주세요", Toast.LENGTH_SHORT).show();
                }

            }
        });

        button2 = findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog = new ProgressDialog(MainActivity.this);
                dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                dialog.setMessage("데이터를 확인하는 중입니다...");
                dialog.setCanceledOnTouchOutside(false);    //바깥쪽을 눌러도 없어지지 않음
                dialog.show();
            }
        });

        button3=findViewById(R.id.button3);
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(dialog!=null){
                    dialog.dismiss();
                }
            }
        });

        seekBar = findViewById(R.id.seekBar);
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                editText.setText(""+progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

    }
}

 

-activity_main.xml-

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="3dp"
        android:layout_marginLeft="3dp"
        android:layout_marginTop="31dp" />

    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/progressBar"
        android:layout_marginTop="119dp"
        android:layout_marginEnd="18dp"
        android:layout_marginRight="18dp"
        android:layout_toStartOf="@+id/button1"
        android:layout_toLeftOf="@+id/button1"
        android:ems="10"
        android:hint="0~100 숫자입력"
        android:inputType="number|textPersonName" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/progressBar"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginTop="118dp"
        android:layout_marginEnd="61dp"
        android:layout_marginRight="61dp"
        android:text="입력" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_marginStart="90dp"
        android:layout_marginLeft="90dp"
        android:layout_marginTop="69dp"
        android:text="보여주기" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button1"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginStart="276dp"
        android:layout_marginLeft="276dp"
        android:layout_marginTop="67dp"
        android:layout_marginEnd="47dp"
        android:layout_marginRight="47dp"
        android:text="닫기" />

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button2"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="41dp" />
</RelativeLayout>

'For developer > Android' 카테고리의 다른 글

(Android)my19_animation  (0) 2020.05.27
(Android)my17_orientation,my18_orientation2(정리x)  (0) 2020.05.27
(Android)my15_touchevent  (0) 2020.05.27
(Android)my14_smsservice  (0) 2020.05.27
(Android)my13_service  (0) 2020.05.21

+ Recent posts