통신으로 받아올 Data

public class modelData() {
    public String id;
    public String type;
}

HTTP 통신을 위한 인터페이스

public interface GetDataService {
    @GET("상대 URI")
    Call<modelData> getData(
            @Query("id") String id,
            @Query("type") String type
    );
}

Retrofit 객체 생성

String BASE_URL = "통신 URL";

Retrofit retrofit = new retrofit2.Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build();
   

Data 호출 Response.body()로 받아온다

GetDataService service = retrofit.create(GetDataService.class);
    
Call<modelData> call = service.getData("id", "type");

call.enqueue(new Callback<modelData>() {
    @Override
    public void onResponse(Call<modelData> call, Response<modelData> response) {
        Toast.makeText(MainActivity.this, "" + response.body().id, Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onFailure(Call<modelData> call, Throwable t) {
        Toast.makeText(MainActivity.this, "알수없는 오류가 발생했습니다...잠시후 다시 시도하십시오!", Toast.LENGTH_SHORT).show();
    }
});

'Android' 카테고리의 다른 글

[Android] 코틀린 기본 문법 - 1  (0) 2019.04.09
[Android] Appcompat Library 란?  (0) 2019.04.08
[Android] CustomListener 사용  (0) 2019.04.02
[Android] AlertDialog 사용  (0) 2019.04.02
[Android] APK 만들기  (0) 2019.03.30

CustomListener interface 추가

public interface CustomListener {
    void onClick(String str);
    void onClick(int pos);
}

CustomListener를 적용

 - CustomListener 변수 추가

 - Set함수 추가

 - Click했을시 listener Click함수를 호출하게 설정

private CustomListener listener;
public void setCustomListener(CustomListener listener) {
    this.listener = listener;
}
holder.listLayout.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        listener.onClick(position);
    }
});

 

외부에서 set함수 호출하여 listener 설정

adapter.setCustomListener(new CustomListener() {
    @Override
    public void onClick(String str) {

    }
});

 

'Android' 카테고리의 다른 글

[Android] Appcompat Library 란?  (0) 2019.04.08
[Android] retrofit 통신  (0) 2019.04.02
[Android] AlertDialog 사용  (0) 2019.04.02
[Android] APK 만들기  (0) 2019.03.30
[Android] '돌아가기' 버튼 구현  (0) 2019.03.29

AlertDialog.Builder를 통해 AlertDialog를 만들 수 있다.

dialog.setView() 함수에 Dialog에 뷰를 추가 할 수 있다.

dialog.setButton() 함수에 확인, 취소 버튼을 추가할 수 있다.

dialog.show() 함수로 원하는 위치에서 AlertDialog를 띄울수 있다.

AlertDialog dialog = new AlertDialog.Builder(this).create();
//dialog.setView(추가할 뷰);
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "취소", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        dialog.dismiss();
    }
});
dialog.setButton(DialogInterface.BUTTON_POSITIVE, "확인", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        
    }
});
dialog.show();

 

'Android' 카테고리의 다른 글

[Android] retrofit 통신  (0) 2019.04.02
[Android] CustomListener 사용  (0) 2019.04.02
[Android] APK 만들기  (0) 2019.03.30
[Android] '돌아가기' 버튼 구현  (0) 2019.03.29
[Android] Comparable 정렬  (0) 2019.03.28

APK를 만들기 전에 먼저 Google Play 스토어에 같은 이름의 패키지가 있는지 확인한다.

패키지명이 겹치는지 확인하기

https://play.google.com/store/apps/details?id={AndroidManifest.xml에에 있는 package의 값}

 

Google Play 스토어에 앱을 등록하려면 반드시 서명된 APK 파일로 만들어야 한다.

단순 빌드가 아닌 Generate Signed Bundle / APK를 선택하자.

우리는 APK를 만들 것이기 때문에 APK를 선택하고 Next.

 

여기서 Key store를 선택하라고 하는데 우린 없으니까 Create new...를 선택.

 

Key store를 저장할 경로를 선택하고 Key store 비밀번호를 입력

Key에 대한 내용을 입력한 후 OK버튼을 눌러서 완료한다.

  - Alias : 전자 증명서의 명칭

  - Password : 증명서의 비밀번호

  - Confirm : 증명서 비밀번호 확인

  - Validity(years) : 증명서 유효기간 (보통 25년 이상 설정)

  - First and Last Name : 전자 증명서의 작정자 이름

  - Organizational Unit : 회사의 부서이름

  - Organization : 회사 이름

  - City or Locality : 도시 또는 지역 이름

  - State or Province : 주 이름 또는 지방 이름

  - Country Code (XX) : 국가 코드(한국은 kr)

 

 

debug 모드가 아닌 release 모드를 선택하고 버전에 관계없이 사용 할 수 있게 V1, V2

모두 체크 후 Finish를 눌러 주면 APK를 생성한다.

 

'Android' 카테고리의 다른 글

[Android] CustomListener 사용  (0) 2019.04.02
[Android] AlertDialog 사용  (0) 2019.04.02
[Android] '돌아가기' 버튼 구현  (0) 2019.03.29
[Android] Comparable 정렬  (0) 2019.03.28
[Android] Tab 사용법  (0) 2019.03.27

오버라이드 함수 dispatchKeyEvent(KeyEvent event) 함수에서 물리버튼 이벤트를 받아올 수 있다.

키코드를 비교하여 돌아가기 버튼을 구분할 수 있다.

 

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
            //돌아가기 버튼
            return true;
        }

        return super.dispatchKeyEvent(event);
    }

 

'Android' 카테고리의 다른 글

[Android] AlertDialog 사용  (0) 2019.04.02
[Android] APK 만들기  (0) 2019.03.30
[Android] Comparable 정렬  (0) 2019.03.28
[Android] Tab 사용법  (0) 2019.03.27
[Android] RecyclerView 예제  (0) 2019.03.26

정렬할 ArrayList 입니다.

List<VideoEntry> list = new ArrayList<>();
Collections.sort(list);

리스트에 저장된 VideoEntry 클래스 입니다.

Comparable을 상속받아 compareTo함수의 내용을 써줍니다.

public class VideoEntry implements Comparable<VideoEntry> {
    public String text;
    public String videoId;
    public String time;

    public VideoEntry(String text, String videoId, String time) {
        this.text = text;
        this.videoId = videoId;
        this.time = time;
    }

    //오름차순
    @Override
    public int compareTo(VideoEntry entry) {
        return this.time.compareTo(entry.time);
    }

    //내림차순
    @Override
    public int compareTo(VideoEntry entry) {
        return entry.time.compareTo(this.time);
    }
}

'Android' 카테고리의 다른 글

[Android] APK 만들기  (0) 2019.03.30
[Android] '돌아가기' 버튼 구현  (0) 2019.03.29
[Android] Tab 사용법  (0) 2019.03.27
[Android] RecyclerView 예제  (0) 2019.03.26
[Android] YouTube Api call Url  (0) 2019.03.22

TabHost태그 사이에 LinearLayout으로 Tab버튼과 컨텐츠를 vertical정렬한다

 

TabWidget의 Height는 반드시 wrap_content로 지정되어야 한다

<TabHost
    android:id="@+id/tabHost"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="9">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <!-- 컨텐츠 삽입 -->
            
        </FrameLayout>
    </LinearLayout>
</TabHost>

 

Activity에 다음 코드를 추가한다

이 때 setIndicator("")에 들어가는 텍스트가 탭의 제목이 된다

// TabHost 참조 후 TabHost.setup() 호출. 호출하지 않으면 TabWidget이 동작 안 함.
TabHost tabHost1 = (TabHost) findViewById(R.id.tabHost1);
tabHost1.setup();

// 첫 번째 Tab. (탭 표시 텍스트:"TAB 1"), (페이지 뷰:"content1")
TabHost.TabSpec ts1 = tabHost1.newTabSpec("Tab Spec 1");
ts1.setContent(R.id.content1) ;
ts1.setIndicator("TAB 1");
tabHost1.addTab(ts1);

// 두 번째 Tab. (탭 표시 텍스트:"TAB 2"), (페이지 뷰:"content2")
TabHost.TabSpec ts2 = tabHost1.newTabSpec("Tab Spec 2");
ts2.setContent(R.id.content2);
ts2.setIndicator("TAB 2");
tabHost1.addTab(ts2);

// 세 번째 Tab. (탭 표시 텍스트:"TAB 3"), (페이지 뷰:"content3")
TabHost.TabSpec ts3 = tabHost1.newTabSpec("Tab Spec 3");
ts3.setContent(R.id.content3);
ts3.setIndicator("TAB 3");
tabHost1.addTab(ts3);

'Android' 카테고리의 다른 글

[Android] '돌아가기' 버튼 구현  (0) 2019.03.29
[Android] Comparable 정렬  (0) 2019.03.28
[Android] RecyclerView 예제  (0) 2019.03.26
[Android] YouTube Api call Url  (0) 2019.03.22
YouTube Android Player API - Download  (0) 2019.03.20

dependencies 추가


1
implementation 'com.android.support:recyclerview-v7:28.0.0'
cs


뷰 추가


1
2
3
4
5
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
cs

item 뷰 추가

1
2
3
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
cs

Activity 코드 추가


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class MainActivity extends AppCompatActivity {
 
    private RecyclerView recyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager layoutManager;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
 
        // use this setting to improve performance if you know that changes
        // in content do not change the layout size of the RecyclerView
        recyclerView.setHasFixedSize(true);
 
        // use a linear layout manager
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
 
        String[] myDataset = {"MENU 1","MENU 2","MENU 3","MENU 4"};
 
        // specify an adapter (see also next example)
        mAdapter = new MyAdapter(myDataset);
        recyclerView.setAdapter(mAdapter);
    }
}
cs


Adapter 추가


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private String[] mDataset;
 
    // Provide a reference to the views for each data item
    // Complex data items may need more than one view per item, and
    // you provide access to all the views for a data item in a view holder
    public static class MyViewHolder extends RecyclerView.ViewHolder {
        // each data item is just a string in this case
        public TextView textView;
        public MyViewHolder(TextView v) {
            super(v);
            textView = v;
        }
    }
 
    // Provide a suitable constructor (depends on the kind of dataset)
    public MyAdapter(String[] myDataset) {
        mDataset = myDataset;
    }
 
    // Create new views (invoked by the layout manager)
    @Override
    public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent,
                                                     int viewType) {
        // create a new view
        TextView v = (TextView) LayoutInflater.from(parent.getContext())
                .inflate(R.layout.text_view, parent, false);
 
        MyViewHolder vh = new MyViewHolder(v);
        return vh;
    }
 
    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        // - get element from your dataset at this position
        // - replace the contents of the view with that element
        holder.textView.setText(mDataset[position]);
 
    }
 
    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}
cs


'Android' 카테고리의 다른 글

[Android] Comparable 정렬  (0) 2019.03.28
[Android] Tab 사용법  (0) 2019.03.27
[Android] YouTube Api call Url  (0) 2019.03.22
YouTube Android Player API - Download  (0) 2019.03.20
[Android] DrawerLayout 사용하기  (0) 2019.03.19

+ Recent posts