">

제주시 맛집 어마장장


   제주 공항에 도착했는데 식사 시간이라면, 거기다 해산물 가득한 무언가를 먹고 싶다면  여기를 찾아가보는건 어떨까?

'어마장장' 이라는 곳이다. 제주시에서 차로 멀리 떨어져 있지 않은 곳에 있다. 제주도에서 맛집이라고 하는 곳이 많은데 그 중에서도 내 입에 맞는 곳을 찾기란 나에게 어려운 일이었다. 하지만 '어마장장' 이라는 가게가 나의 '아점'을 만족시켜 주었다. 


  주차장 입구는 막지 말아달라는 입간판이 보인다. 주차장은 차량이 3~4대 정도 밖에 들어가지 못할만큼 협소한데 음식 맛에 비하면 너무나도 부족한 공간이 아닐까 하는 생각이 든다. 메뉴는 '해물 뚝배기', '전복 뚝배기', '흑돼지 돈까스', '크림 전복 스프'가 있다. 제육 볶음이 기본 찬으로 나오는데 이것도 짜지도, 맵지도 않으면서 식욕을 돋우는 맛이난다. 

  좀더 시원한 국물을 맛보고 싶다면 '해물 뚝배기'를 추천한다.(아내 입맛) 하지만 개인 적으로 3천원 더 내고 '전복 뚝배기'를 먹는 것이 더 낫다고 생각한다.   어마장장에서 가장 점수를 높게 주고 싶은 부분은 저렴한 재료로 음식을 만들지 않는다는 것이고, 정직하게 음식을 만드는 느낌을 준다는 것이다. GMO 제품을 사용하지 않고, 천연 조미료를 사용한다. 인공 조미료를 사용하지 않아도 싱싱한 해산물을 사용해서 국물에는 감칠맛이 충분히 느껴진다. 재료에서 또 다른 점은 우리가 보통 접하던 새우가 아닌 좀 다르게 생긴 새우가 들어있다.(이름을 들었는데 잊어버렸음.. 아는 분은 뎃글좀..) 우리는 '해물 뚝배기'와 '전복 뚝배기'를 시켰다. 국물 맛이 미세하게 차이가 난다. 가격은 아래 그림 참조(해물 뚝배기: 1만원, 전복 뚝배기: 1.3만원 - 2017년 7월 기준)





Viewpager 쉽게 만들어 보자


구성은 MainActivity 하나에 Fragment 3개, 그리고 PagerAdapter을 생성합니다. 


프로젝트를 BlankActivity로 하나 생성합니다. 


1. gradle의 dependencies에 코드를 추가합니다. 

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:support-v4:23.4.0'
testCompile 'junit:junit:4.12'
compile 'com.android.support:design:25.2.0'
}


2. TabFragment1, TabFragment2, TabFragment3 으로 Fragment를 3개 생성합니다. 

각각의 Fragment는 화면 전환이 되면 알아볼 수 있게 TextView 등을 추가합니다. 


3. MainActivity에 다음과 같이 작성합니다. 

public class MainActivity extends AppCompatActivity {

private TabLayout tabLayout;
private ViewPager viewPager;

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

// Adding Toolbar to the activity
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

// Initializing the TabLayout
tabLayout = (TabLayout) findViewById(R.id.tabLayout);
tabLayout.addTab(tabLayout.newTab().setText("First"));
tabLayout.addTab(tabLayout.newTab().setText("Second"));
tabLayout.addTab(tabLayout.newTab().setText("Third"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

// Initializing ViewPager
viewPager = (ViewPager) findViewById(R.id.pager);

// Creating TabPagerAdapter adapter
TabPagerAdapter pagerAdapter = new TabPagerAdapter(getSupportFragmentManager(),
tabLayout.getTabCount());
viewPager.setAdapter(pagerAdapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

// Set TabSelectedListener
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(TabLayout.Tab tab) {

}

@Override
public void onTabReselected(TabLayout.Tab tab) {

}
});
}
}


4. TabPagerAdapter.class 파일을 하나 생성 한 뒤에 다음과 같이 작성합니다. 

public class TabPagerAdapter extends FragmentStatePagerAdapter {

// Count number of tabs
private int tabCount;

public TabPagerAdapter(FragmentManager fm, int tabCount) {
super(fm);
this.tabCount = tabCount;
}

@Override
public Fragment getItem(int position) {

// Returning the current tabs
switch (position) {
case 0:
TabFragment1 tabFragment1 = new TabFragment1();
return tabFragment1;
case 1:
TabFragment2 tabFragment2 = new TabFragment2();
return tabFragment2;
case 2:
TabFragment3 tabFragment3 = new TabFragment3();
return tabFragment3;
default:
return null;
}
}

@Override
public int getCount() {
return tabCount;
}
}


5. 빌드해서 확인하면 탭을 클릭해서도 화면 이동이 되고, 쓸어 넘겨서도 화면 이동이 가능하다. 


'프로그래밍 > Android' 카테고리의 다른 글

탭(Tab) 쉽게 만들어 보자  (2) 2017.05.19
AsyncTask 쉬운 따라하기  (0) 2017.05.15
Retrofit 단순 예제  (0) 2017.05.11
Preference  (0) 2017.05.08
리스트뷰 아이템 내용 가져오기  (0) 2017.03.21

탭(Tab) 쉽게 만들어 보자


구성을 설명하자면 뼈대가 되는 Activity 위에 Fragment로 화면을 변경해 주는 것이다.



프로젝트를 생성한다. Blank Activity로 생성!


1. gradle의 dependencies에 코드를 추가한다.

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:support-v4:23.4.0'
testCompile 'junit:junit:4.12'
compile 'com.android.support:design:25.2.0'
}


2. TabFragment1, TabFragment2, TabFragment3와 BlankFragment 의 이름으로 Fragment 4개를 생성한다. 

TabFragment1, TabFragment2, TabFragment3는 화면 전환이 되면 알아 볼 수 있도록 TextView 등을 추가한다.

BlankFragment에는 빈 화면이 되도록 구성한다. 


3. MainActivity에 다음과 같이 작성한다. 

public class MainActivity extends AppCompatActivity {

private TabLayout tabLayout;

private android.support.v4.app.Fragment fragment;
private android.support.v4.app.FragmentManager fragmentManager;

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

// Tab
fragmentManager = getSupportFragmentManager();

// Adding Toolbar to the activity
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

// Initializing the TabLayout
tabLayout = (TabLayout) findViewById(R.id.tabLayout);
tabLayout.addTab(tabLayout.newTab().setText("First"));
tabLayout.addTab(tabLayout.newTab().setText("Second"));
tabLayout.addTab(tabLayout.newTab().setText("Third"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);


fragment = new TabFragment1();
fragmentManager.beginTransaction().replace(R.id.content_main, fragment).commit();

// Set TabSelectedListener
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
switch (tab.getPosition()) {
case 0:
fragment = new TabFragment1();
fragmentManager.beginTransaction().replace(R.id.content_main, fragment).commit();
break;
case 1:
fragment = new TabFragment2();
fragmentManager.beginTransaction().replace(R.id.content_main, fragment).commit();
break;
case 2:
fragment = new TabFragment3();
fragmentManager.beginTransaction().replace(R.id.content_main, fragment).commit();
break;
default:
fragment = new TabFragment1();
fragmentManager.beginTransaction().replace(R.id.content_main, fragment).commit();
}

}

@Override
public void onTabUnselected(TabLayout.Tab tab) {

}

@Override
public void onTabReselected(TabLayout.Tab tab) {

}
});

}
}


4. layout의 activity_main.xml을 다음과 같이 작성한다. 

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

<!--Custom Toolbar-->
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

<fragment
android:id="@+id/content_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.sauce.mytablayout.BlankFragment" />

</LinearLayout>



'프로그래밍 > Android' 카테고리의 다른 글

Viewpager 쉽게 만들어 보자  (0) 2017.05.25
AsyncTask 쉬운 따라하기  (0) 2017.05.15
Retrofit 단순 예제  (0) 2017.05.11
Preference  (0) 2017.05.08
리스트뷰 아이템 내용 가져오기  (0) 2017.03.21

AsyncTask 쉬운 따라하기



public class MainActivity extends AppCompatActivity {
ProgressBar progressBar;
TextView textView;
Button button;
Async async;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar = (ProgressBar)findViewById(R.id.progressBar);
textView = (TextView)findViewById(R.id.textView_result);
button = (Button)findViewById(R.id.btn_stop);


async = new Async();
async.execute(0, 100);

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
async.cancel(false);
}
});
}


// 첫 번째 인자는 doInBackground, 두 번째는 onProgressUpdate,
// 세 번째는 onPostExecute와 onCancelled에 사용됨
private class Async extends AsyncTask<Integer, Integer, Integer>{
@Override
protected Integer doInBackground(Integer... params) {
int i = params[0];
int j = params[1];

while(i < 100 && !isCancelled()) { // isCancelled는 중간에 cancel 했는지 확인하기 위해 사용
Log.d("Test", String.valueOf(i));
publishProgress(i, j);
i++;
j--;
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return i;
}

// 가장 먼저 실행 됨
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.d("Test", "============== Pre Execute =============");
}

// doInBackground에서 작업이 모두 마치면 실행 됨
@Override
protected void onPostExecute(Integer integer) {
super.onPostExecute(integer);

textView.setText(String.valueOf(integer));
}

// doInBackground에서 호출하면 실행 됨
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
Log.d("Test", "============== onProgressUpdate ==============");
Log.d("Test", "Progress: " + String.valueOf(values[0]) + " " + String.valueOf(values[1]));
progressBar.setProgress(values[0]);
textView.setText(String.valueOf(values[0]));
}

// cancel 호출하면 실행 됨
@Override
protected void onCancelled(Integer integer) {
super.onCancelled(integer);
Log.d("Test", "============== onCancelled value: " + integer + "============");
}

// cancel 호출하면 실행 됨
@Override
protected void onCancelled() {
super.onCancelled();
Log.d("Test", "============== onCancelled ==================");
}
}
}


주석만 대충 읽어봐도 흐름은 눈에 보일 것이다. onProgressUpdate와 onPostExecute에서 UI 작업을 하면 된다. 

차이점은 onProgressUpdate에서는 스레드가 동작하는 동안 계속 UI를 변경 시킬 수 있고, onPostExecute는 

스레드가 종료된 이후 UI를 변경한다는 점이다. 


doInBackground 메서드 안의 while문에서 isCancelled 메서드를 통해 스레드가 cancel 됐는지를 계속 확인한다.

AsyncTask를 즉각 멈추기 위해서 사용하는 것이다. 

이런 확인 과정이 없으면 AsyncTask를 중간에 종료해도 while문은 조건이 틀릴때 까지 계속 동작한다. 



'프로그래밍 > Android' 카테고리의 다른 글

Viewpager 쉽게 만들어 보자  (0) 2017.05.25
탭(Tab) 쉽게 만들어 보자  (2) 2017.05.19
Retrofit 단순 예제  (0) 2017.05.11
Preference  (0) 2017.05.08
리스트뷰 아이템 내용 가져오기  (0) 2017.03.21

Retrofit


1. 인터넷을 사용하기 때문에 manifests에 퍼미션을 등록 합니다. 

<uses-permission android:name="android.permission.INTERNET"/>


2. gradle에 retrofit를 추가한다. 이후 gson도 사용할 예정이라 미리 추가 했습니다. 

compile 'com.google.code.gson:gson:2.7'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'


3. Interface를 하나 생성한다. 예제로는 ApiService.class 파일에 만들도록 하겠습니다. 

아래 Url은 json 형태의 데이터를 서버로부터 미리 받을 수 있도록 만들어 놓은 사이트 입니다.  

public interface ApiService {
public static final String API_URL = "http://jsonplaceholder.typicode.com/";

@GET("comments")
Call<ResponseBody>getComment(@Query("postId") int postId);

}

@GET는 GET 방식을 의미하며 뒤의 "comments"는 URL 이후 주소를 의미 합니다. 

@Query("postId")는 url에서 ?postId= 를 의미하고, int postId는 파라미터 값을 의미 합니다. 

즉, http://jsonplaceholder.typicode.com/comments?postId=1 과 같은 url이 만들어 집니다.


4. MainActivity에서 retrofit을 호출해 보도록 하겠습니다.

public class MainActivity extends AppCompatActivity {
Retrofit retrofit;
ApiService apiService;
Call<ResponseBody> comment;

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

retrofit = new Retrofit.Builder().baseUrl(ApiService.API_URL).build();
apiService = retrofit.create(ApiService.class);

comment = apiService.getComment(1);
comment.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
try {
Log.d("Test", response.body().string());
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {

}
});
}
}


실행하면 로그로 json 형태의 데이터를 가져오는 것을 확인할 수 있습다. 

이후 gson을 통해 데이터를 간편하게 파싱하는 것을 진행하도록 하겠습니다. 

'프로그래밍 > Android' 카테고리의 다른 글

탭(Tab) 쉽게 만들어 보자  (2) 2017.05.19
AsyncTask 쉬운 따라하기  (0) 2017.05.15
Preference  (0) 2017.05.08
리스트뷰 아이템 내용 가져오기  (0) 2017.03.21
리스트뷰의 마지막 확인하기  (0) 2017.03.21

Preference


정의하기: 

SharedPreferences pref;


저장할 공간 만들기: 

pref = getSharedPreferences("setting", 0);


여기서 0은 읽기, 쓰기 가능이며 MODE_WORLD_READABLE은 읽기 공유

MODE_WORLD_WRITEABLE는 쓰기 공유입니다. 

또한 fragment에서 preference 저장할 공간을 만드려면 아래와 같이 해야 합니다.

pref = this.getActivity().getSharedPreferences("setting", 0); 


저장된 값을 가져 오는 방법은 다음과 같습니다. (문자열일 때)

String preStatement = pref.getString("setting", "basic");

어디서 값을 가져올지(setting)와 저장된 값이 없다면 기본 값(basic)을 가져오도록 합니다. 


값을 넣는 방법은 아래와 같습니다. 

SharedPreference.Editor editor = pref.edit();

editor.putString("setting", "saved");

editor.commit();


반드시 commit를 해야합니다. 



앱이 커지면 preference로 사용하는 개수가 많아지고 관리가 잘 되지 않습니다. 

그래서 class 파일을 하나 더 만들어서 별도로 관리하는 것이 좋습니다. 

class 파일을 하나 더 만든 다음

public static final String PREF_SETTING = "PREF_SETTING";

으로 가져온 다음 key 값에 클래스.PREF_SETTING로 사용하면 됩니다. 


'프로그래밍 > Android' 카테고리의 다른 글

AsyncTask 쉬운 따라하기  (0) 2017.05.15
Retrofit 단순 예제  (0) 2017.05.11
리스트뷰 아이템 내용 가져오기  (0) 2017.03.21
리스트뷰의 마지막 확인하기  (0) 2017.03.21
CheckBox 이미지 변경하기  (0) 2017.03.21

안드로이드 리스트 뷰 아이템 내용 가져오는 방법



listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Object vo = (Object)adapterView.getAdapter().getItem(i); //리스트뷰의 포지션 내용을 가져옴.
}
});

'프로그래밍 > Android' 카테고리의 다른 글

Retrofit 단순 예제  (0) 2017.05.11
Preference  (0) 2017.05.08
리스트뷰의 마지막 확인하기  (0) 2017.03.21
CheckBox 이미지 변경하기  (0) 2017.03.21
커스텀 리스트뷰 만들기 - Chapter01  (0) 2017.03.18

리스트뷰의 마지막 확인하기


  리스트뷰의 마지막을 확인하는 방법은 아래와 같습니다. 마지막임이 확인되면 그 뒤에 서버로부터 다음 리스트를 받아와서 뿌려줄 수 있겠죠? 

listview.setOnScrollListener(new AbsListView.OnScrollListener() {
        boolean lastItemVisibleFlag = false;
	@Override
	public void on Scroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
		// 현재 화면에 보이는 첫번째 리스트 아이템의 번호(firstVisibleItem) +
        // 현재 화면에 보이는 리스트 아이템의 갯수(visibleItemCount)가 
        // 리스트 전체의 갯수(totalItemCount) -1 보다 크거나 같을때
		lastItemVisibleFlag = (totalItemCount > 0) && (firstVisibleItem + visibleItemCount >= totalItemCount;
	}
	@Override
	public void on ScrollStateChanged(AbsListView view, int scrollState) {
		 //OnScrollListener.SCROLL_STATE_IDLE은 스크롤이 이동하다가 멈추었을때 발생되는 스크롤 상태입니다.
		 //즉 스크롤이 바닥에 닿아 멈춘 상태에 처리를 하겠다는 뜻
		 if(scrollState == on ScrollListener.SCROLL_STATE_IDLE && lastItemVisibleFlag) {
			//TODO 화면이 바닥에 닿을때 처리
		}
	}
});



'프로그래밍 > Android' 카테고리의 다른 글

Preference  (0) 2017.05.08
리스트뷰 아이템 내용 가져오기  (0) 2017.03.21
CheckBox 이미지 변경하기  (0) 2017.03.21
커스텀 리스트뷰 만들기 - Chapter01  (0) 2017.03.18
해시키(Hash key) 가져오기  (0) 2017.03.15

CheckBox 이미지 변경하기


체크박스의 이미지를 변경하기 위해 selector을 이용한다. 


1. selector을 xml 파일을 새로 만들어 drawable 폴더에 넣는다. 


check_box.xml

<!--?xml version="1.0" encoding="utf-8"?--> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:drawable="@drawable/이미지파일 (체크상태)">
 <item android:state_checked="false" android:drawable="@drawable/이미지파일 (체크상태)"> <item android:drawable="@drawable/이미지파일 (비체크상태)"> </selector>


2. checkbox가 있는 layout에서 selector을 지정한다. button에다 적용하면 된다. 

<CheckBox
     android:layout_height="wrap_content"
     
     android:layout_width="wrap_content"
     android:button="@drawable/check_box”/>


커스텀 리스트 뷰 만들기 - Chapter 01


  리스트 뷰를 사용하기 위해 기본 프로젝트를 생성한다. 이후 MainActivity 레이아웃 즉, activity_main.xml에 아래와 같이 리스트 뷰를 추가한다. 이 장에서 앞으로 진행할 항목은 다음과 같다. 


Chapter 01

1. 리스트 뷰를 activity_main.xml에 추가한다.

2. 리스트 뷰에 들어갈 각 아이템에 대한 레이아웃을 만든다. 

3. 각 아이템에 대한 데이터를 정의한다. 


Chapter 02 - 클릭하면 이동합니다. 

1. Adapter을 구현한다.

2. MainActivity에 Adapter을 붙인다. 

3. 리스트뷰에 클릭 이벤트를 만들어 본다. 




1. 리스트 뷰를 activity_main.xml에 추가한다. 


[ activity_main.xml ]

<!--?xml version="1.0" encoding="utf-8"?-->
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.nexthops.myapplication.MainActivity">
    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ListView>
</RelativeLayout>



2. 리스트뷰에 들어갈 각 아이템에 대한 레이아웃을 만든다.

  리스트뷰에 들어갈 각 아이템에 대한 레이아웃을 만듭니다. layout 폴더에서 list_item_layout.xml을 추가합니다.


[ list_item_layout.xml ]

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/appIcon"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_marginLeft="5dp"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp"/>
    <TextView
        android:id="@+id/appName"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="3dp"
        android:layout_toRightOf="@+id/appIcon"/>
    <TextView
        android:id="@+id/packageName"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:layout_marginLeft="5dp"
        android:layout_toRightOf="@+id/appIcon"
        android:layout_below="@id/appName"/>
</RelativeLayout>



3. 각 아이템에 대한 데이터를 정의합니다. 이 말인 즉, 각 아이템에 대해서 get, set할 수 있도록 정의합니다. 

ListViewItem.java 파일을 하나 생성합니다. 


[ListViewItem.java]

import android.graphics.drawable.Drawable;
public class ListViewItem {
    private Drawable appIconDrawable;
    private String appName;
    private String packageName;

    public Drawable getAppIconDrawable() {
        return appIconDrawable;
    }

    public void setAppIconDrawable(Drawable appIconDrawable) {
        this.appIconDrawable = appIconDrawable;
    }

    public String getAppName() {
        return appName;
    }

    public void setAppName(String appName) {
        this.appName = appName;
    }

    public String getPackageName() {
        return packageName;
    }

    public void setPackageName(String packageName) {
        this.packageName = packageName;
    }


  여기까지 화면을 구성하는 부분은 다 만들어 졌습니다. 다음 챕터에서 adapter과 연결 시켜 실제 리스트 뷰에 생성한 아이템이 나오고, 클릭할 수 있도록 만들어 보겠습니다. 

+ Recent posts