* 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 |