반응형
TabLayout & design
- gradle(app) 라이브러리 다운로드
implementation 'com.android.support:design:28.0.0'
- menu의 리소스화
package multi.android.material_design_pro.exam;
public class FragmentExam01 extends AppCompatActivity {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
ViewPager examPager;
ExamPagerAdapter adapter = new ExamPagerAdapter(getSupportFragmentManager());
ViewFragment1 viewFragment1;
//ViewFragment2 viewFragment2;
ListFragmentTest viewFragment2;
ViewFragment3 viewFragment3;
TabLayout tabExam;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager_exam);
examPager = findViewById(R.id.examPager);
setupViewPager(examPager);
examPager.addOnPageChangeListener(new PageListener());
tabExam = findViewById(R.id.tabExam);
viewFragment1 = new ViewFragment1();
viewFragment2 = new ListFragmentTest();
viewFragment3 = new ViewFragment3();
tabExam.setupWithViewPager(examPager);
}
public void setupViewPager(ViewPager viewPager){
adapter.addFragment(new ViewFragment1(), "첫번째 뷰");
adapter.addFragment(new ListFragmentTest(), "두번째 뷰");
adapter.addFragment(new ViewFragment3(), "세번째 뷰");
viewPager.setAdapter(adapter);
}
public void btn_click(View view){
examPager.setCurrentItem(Integer.parseInt(view.getTag().toString()));
}
class ExamPagerAdapter extends FragmentPagerAdapter{
public ExamPagerAdapter(FragmentManager supportFragmentManager) {
super(supportFragmentManager);
}
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
public void addFragment(Fragment fragment, String title){
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@NonNull
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
}
class PageListener implements ViewPager.OnPageChangeListener {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
//페이지가 변경되었을 때
Toast.makeText(FragmentExam01.this, "페이지가 전환", Toast.LENGTH_SHORT).show();
}
@Override
public void onPageScrollStateChanged(int state) {
}
}
}
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabExam"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="scrollable"/>
20-04-17 금
drawer
navigation view, recycler view,
- design 이용할 때는 프로젝트 새로만들었으니 library를 추가해주어야 한다.
- circle_image_View
implementation 'de.hdodenhof:circleimageview:3.0.1'
Recycler View
- 실행과정
Recycler에 출력할 데이터 준비
Adapter생성
=> row하나에 대한 구성 레이아웃
- Recycler에 레이아웃을 설정
=> ex) LinearLayout, GirdLayout
Recycler와 adapter를 연결
추가적인 요소들을 적용할 수 있다. - 꾸미기, 애니메이션
-SimpleRecyclerView
public class SimpleRecyclerTest extends AppCompatActivity {
RecyclerView list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_recycler_test);
list = findViewById(R.id.list);
//1. Recycler에 출력할 데이터 준비
List<SimpleItem> recycler_simple_data = new ArrayList<>();
for(int i=0; i<10; i++){
SimpleItem item = new SimpleItem("simple_item"+i);
recycler_simple_data.add(item);
}
//2. Adapter생성
SimpleItemAdapter adaptaer = new SimpleItemAdapter(this,
R.layout.simple_item, recycler_simple_data);
//3. Recycler에 레이아웃을 설정 **
// => ex) LinearLayout, GirdLayout
// RecyclerView에 설정할 레이아웃 객체 설정
// 1. LinearLayout 설정
/*LinearLayoutManager manager = new LinearLayoutManager(getApplicationContext());
manager.setOrientation(LinearLayoutManager.HORIZONTAL);*/
// 2. GridLayout설정
GridLayoutManager manager = new GridLayoutManager(getApplicationContext(), 2);
list.setHasFixedSize(true);
list.setLayoutManager((manager));// VERTICAL LinearLayout이 셋팅
//4. Recycler와 adapter를 연결
list.setAdapter(adaptaer);
//5. 추가적인 요소들을 적용할 수 있다. - 꾸미기, 애니메이션
}
//RecyclerView에서 사용하는 Adapter를 커스터마이징
//Adapter안에 ViewHolder 포함 - 정의(ListView사용할때와 동일한 역할)
// -------------
// ^ㅡㅡㅡㅡㅡㅡ inner Class로 정의
public class SimpleItemAdapter
extends RecyclerView.Adapter<SimpleItemAdapter.ViewHolder> {
Context context;
int row_res_id; // row를 구성하는 layout
List<SimpleItem> data; //RecyclerView에 출력될 전체 데이터
public SimpleItemAdapter(Context context, int row_res_id, List<SimpleItem> data) {
this.context = context;
this.row_res_id = row_res_id;
this.data = data;
}
//xml로부터 뷰(한 row에 대한 뷰)를 만들어서 ViewHolder로 넘기는 작업
//View를 구성하는 구성요소의 리소스를 가져오는 작업을 하는 객체
//1. onCreateViewHolder에서 row에 대한 뷰를 inflate해서 생성
//2. ViewHolder객체를 만들어서 1번에서 생성한 뷰를 넘긴다.
//3. ViewHolder객체안에서 onCreateViewHolder메소드에서 리턴반은 객체에서 데이터를 연결할 뷰를 찾아온다.
//4. onBindViewHolder메소드에서 ViewHolder가 갖고 있는 구성요소에 데이터를 연결하기
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(row_res_id, null);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Log.d("recycler","onBindViewHolder:"+position);
//ViewHolder가 찾아놓은 TextView를 꺼내고
TextView row_txt_view = holder.txtview;
//꺼낸 TextView에 데이터 연결
row_txt_view.setText(data.get(position).getData());
//TextView에 클릭이벤트 연결
row_txt_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "데이터연결완료", Toast.LENGTH_LONG).show();
}
});
}
//RecyclerView에 출력할 데이터의 갯수 리턴
@Override
public int getItemCount() {
return data.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
TextView txtview;
public ViewHolder(@NonNull View itemView) {
super(itemView);
txtview = itemView.findViewById(R.id.itemview);
}
}
반응형
'안드로이드 프로그래밍 > [ Android Framework ]' 카테고리의 다른 글
[ Android ] 10. 싱글쓰레드와 멀티쓰레드(Handler, AysncTask) (0) | 2020.08.12 |
---|---|
[ Andorid ] 09. OnMapReadyCallBack으로 Google Map 이용해보기 (0) | 2020.08.12 |
[ Android ] 07. 부분 화면전환을 위한 Fragment (0) | 2020.08.12 |
[ Android ] 06. 안드로이드에서 Map(지도) 이용하기 (0) | 2020.08.12 |
[ Android ] 05. 안드로이드의 FileSystem (0) | 2020.08.12 |