본문 바로가기

노트필기

[Android] 2017.06.20(오전)

* Adapter


- ListView 항목이 될  뷰를 생성하는 역할을 한다. 즉 리스트뷰에 보여지는 한 줄을 만듬

- 넣어준 데이터를 뷰에 적용.

 


<StopWatchActivity.java>

package com.ebookfrenzy.eunbapp;

import android.os.Bundle;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.LinearLayout;
import android.widget.ListView;

import java.util.ArrayList;

public class StopWatchActivity extends AppCompatActivity {

private Button btnStart;
private Button btnStop;
private Button btnRecord;
private LinearLayout lineBtns;
private ListView lvRecord;
private ArrayList<String> listItem;
private ArrayAdapter<String> adapter;
private Chronometer chro;

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

btnStart = (Button) findViewById(R.id.btnStart);
btnStop = (Button) findViewById(R.id.btnStop);
btnRecord = (Button) findViewById(R.id.btnRecord);

lvRecord = (ListView) findViewById(R.id.lvRecord);

chro = (Chronometer) findViewById(R.id.chro);

listItem = new ArrayList<>();
// //데이터 입력할 액티비티 //레이아웃을 어떻게 짤건인지 //어떤 데이터를 가져올건지
// adapter = new ArrayAdapter<>(StopWatchActivity.this, android.R.layout.simple_list_item_1, listItem);
//리스트뷰에 들어가는 문자 스타일을 바꾸려고 임의의로 레이아웃을 설정해 준 것이다
//root를 TextView로 해서 생성을 하고 원하는 문자스타일을 지정해주면 된다.
adapter = new ArrayAdapter<>(StopWatchActivity.this, R.layout.simplelist, listItem);
lvRecord.setAdapter(adapter);


btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
lineBtns = (LinearLayout) findViewById(R.id.lineBtns);
lineBtns.setWeightSum(2);
btnStart.setVisibility(View.GONE);
//크로노미터가 생성 된 시점 부터 시간을 재기 때문에 시작을 눌렀을 때 초기화를 시켜줘야 한다.
chro.setBase(SystemClock.elapsedRealtime());
chro.start();

listItem.clear();
listItem.add("<Record>");
adapter.notifyDataSetChanged();//어댑터 새로고침 기능
}
});
btnRecord.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listItem.add(chro.getText().toString());
adapter.notifyDataSetChanged();
}
});
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
chro.stop();
lineBtns.setWeightSum(3);
btnStart.setVisibility(View.VISIBLE);
}
});
lvRecord.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
//ListView //선택한 뷰 //선택한 위치 //그 위치의 아이디
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
listItem.remove(position);
adapter.notifyDataSetChanged();
return false;
}
});
}
}


<PhonbookListActivity>


package com.ebookfrenzy.eunbapp;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;

import java.util.ArrayList;

public class PhoneBookListActivity extends AppCompatActivity {

private PhoneBookCustomAdapter adapter;
private ArrayList<PhoneVO> listItem;
ListView listView;

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

listView = (ListView) findViewById(R.id.listView);
listItem = new ArrayList<>();
listItem.add(new PhoneVO(R.drawable.co, "112"));
listItem.add(new PhoneVO(R.drawable.penguins2, "119"));
adapter = new PhoneBookCustomAdapter(PhoneBookListActivity.this, R.layout.phonebooklist, listItem);
listView.setAdapter(adapter);

}
}


<PhoneBookCustomAdapter>

package com.ebookfrenzy.eunbapp;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

public class PhoneBookCustomAdapter extends BaseAdapter {
Context context;
int phoneLayout;
ArrayList<PhoneVO> listItem;
//상속받은 layout id를 눈에 보이게 끔 해주는 뷰를 생성하는 역할을 한다.
//액티비티를 상속받은 layout만 생성 할 수 있다.
LayoutInflater layoutInflater;
//현재화면 정보
public PhoneBookCustomAdapter(Context context, int phoneLayout, ArrayList<PhoneVO> listItem) {
this.context = context;
this.phoneLayout = phoneLayout;
this.listItem = listItem;
//context가 가지고 있는 정보를 추출하는 것
this.layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

//리스트뷰의 전체 크기 결정
@Override
public int getCount() {
return listItem.size();
}
//i번째에 아이템 반환
@Override
public Object getItem(int i) {
return listItem.get(i);
}
//i을 넘겨주는게 일반적
@Override
public long getItemId(int i) {
return i;
}
//
@Override
//처음 사용했던 뷰를 재사용 하려고 가져오는것
public View getView(final int i, View view, ViewGroup viewGroup) {
if (view == null) {
view = layoutInflater.inflate(phoneLayout, viewGroup, false);
}
final TextView tv = view.findViewById(R.id.tvPhoneNum);
tv.setText(listItem.get(i).getNum());

final ImageView iv = view.findViewById(R.id.img);
iv.setImageResource(listItem.get(i).getImg());


Button btn = view.findViewById(R.id.btnCall);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.v("asdf","asdf");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("tel:" + listItem.get(i).getNum()));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

}
});



return view;
}
}


<PhoneVO>


package com.ebookfrenzy.eunbapp;

/**
* Created by admin19 on 2017-06-20.
*/

public class PhoneVO {

int img;
String num;

public PhoneVO(int img, String num) {
this.img = img;
this.num = num;
}

public int getImg() {
return img;
}

public void setImg(int img) {
this.img = img;
}

public String getNum() {
return num;
}

public void setNum(String num) {
this.num = num;
}
}




'노트필기' 카테고리의 다른 글

[Web] Class01  (0) 2017.07.11
[Android] 2017.06.20(오후)  (0) 2017.06.20
[Do it 안드로이드] Day 16 - 4  (0) 2017.06.18
[Do it 안드로이드] Parcelable 예제  (0) 2017.06.18
[Android] 5th Class  (0) 2017.06.13