반응형
firebase 안드로이드 2 단계 - tablayout framgment CustomAdapter 감사리스트 불러오기
소스코드
https://firebasestorage.googleapis.com/v0/b/testmemo-8978f.appspot.com/o/android_thanks_project%2FThanks2.zip?alt=media&token=41421387-7dbf-43a8-9e71-7dbdbe41750f
일지:
tablayout 을 구성하고, fragment를 만들어주었다.
그리고 customAdaptView를 만들어서 listview에 넣어주었 (AdaptView를 통해서)
파이어베이스에서 데이터를 가져와서 리스트뷰에 뿌려주었다.
다음에 할 것:
1.감사리스트 써서 저장.
2.리스트뷰 갱신.
3.감사리스트 글 하나 클릭하면 다른 유저 프로필 페이지로 넘어가기.
4.(레이아웃만들어주고, 파이어 베이스에서 데이터 받아와서 뿌려주기, 뒤로가기 버튼 추가)
5.가입할 때 파이어베이스 user table에 user name 넣어주기.
소스코드
탭바 레이아웃
탭바 java
package me.happygate.thanks;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.widget.TextView;
import android.support.v4.app.Fragment;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
public class MainActivity extends AppCompatActivity {
//이메일 비밀번호 로그인 모듈 변수
private FirebaseAuth mAuth;
//현재 로그인 된 유저 정보를 담을 변수
private FirebaseUser currentUser;
private TextView mTextMessage;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
replaceFragment(Fragement_A_Activity.newInstnace());
return true;
case R.id.navigation_dashboard:
replaceFragment(Fragement_B_Activity.newInstnace());
return true;
case R.id.navigation_notifications:
replaceFragment(Fragement_C_Activity.newInstnace());
return true;
}
return false;
}
};
// Fragment 변환을 해주기 위한 부분, Fragment의 Instance를 받아서 변경
private void replaceFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content, fragment).commit();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
mTextMessage = (TextView) findViewById(R.id.message);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.content, Fragement_A_Activity.newInstnace()).commit();
}
//로그인 되어있으면 currentUser 변수에 유저정보 할당. 아닌경우 login 페이지로 이동!
@Override
public void onStart() {
super.onStart();
// Check if user is signed in (non-null) and update UI accordingly.
currentUser = mAuth.getCurrentUser();
if(currentUser == null){
startActivity(new Intent(MainActivity.this, LoginActivity.class));
finish();
}
}
}
리스트뷰
리스트뷰 소스코드
package me.happygate.thanks;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
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.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.FirebaseDatabase;
import java.util.ArrayList;
public class Fragement_A_Activity extends Fragment {
public static Fragement_A_Activity newInstnace(){
return new Fragement_A_Activity();
}
//이메일 비밀번호 로그인 모듈 변수
private FirebaseAuth mAuth;
//현재 로그인 된 유저 정보를 담을 변수
private FirebaseUser currentUser;
//데이터 베이스 저장
private static FirebaseDatabase database;
//감사리스트 데이터 담을 리스트
ArrayList<String> names = new ArrayList<String>();
ArrayList<String> contents = new ArrayList<String>();
ArrayList<String> dates = new ArrayList<String>();
ArrayList<String> thankPK = new ArrayList<String>();
ArrayList<String> userKey = new ArrayList<String>();
CustomAdapter ca; //커스텀 어뎁터
//제일 먼저 호출
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAuth = FirebaseAuth.getInstance();
database = FirebaseDatabase.getInstance();
Log.d("myTag1", "onCreate-0");
displayThanks();
}
//두번째 호출됨
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Activity root = getActivity(); //이 클래스가 프레그먼트이기 때문에 액티비티 정보를 얻는다.
Log.d("myTag1", "onCreateView-1");
Log.d("myTag2", "onCreateView-2");
View view = inflater.inflate(R.layout.activity_fragement__a_,container,false);
ListView listView = (ListView)view.findViewById(R.id.listView);
final EditText editText = (EditText)view.findViewById(R.id.thanksTxtField);
final Button writeBtn = (Button)view.findViewById(R.id.thankWriteButton);
writeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
writeBtn.setText(editText.getText().toString());
}
});
ca = new CustomAdapter();
listView.setAdapter(ca);
return view;
}
//커스텀 뷰
class CustomAdapter extends BaseAdapter{
@Override
public int getCount() {
return names.size();
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Activity root = getActivity(); //이 클래스가 프레그먼트이기 때문에 액티비티 정보를 얻는다.
Toast.makeText(root,"getView" , Toast.LENGTH_SHORT).show();
//커스텀뷰에 있는 객체들 가져오기
convertView = getLayoutInflater().inflate(R.layout.custom_listview_layout,null);
TextView tName = (TextView)convertView.findViewById(R.id.textView_name);
TextView tDate = (TextView)convertView.findViewById(R.id.textView_date);
TextView tContent = (TextView)convertView.findViewById(R.id.textView_content);
tName.setText(names.get(position));
tDate.setText(dates.get(position));
tContent.setText(contents.get(position));
return convertView;
}
}
//감사 리스트 호출 함수
public void displayThanks(){
database.getReference("thanks/")
.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
//개수 만큼 돈다
//Activity root = getActivity(); //이 클래스가 프레그먼트이기 때문에 액티비티 정보를 얻는다.
//Toast.makeText(root,"onChildAdded-2" , Toast.LENGTH_SHORT).show();
Log.d("myTag3", "onChildAdded-2");
ThankDTo thankDTo = dataSnapshot.getValue(ThankDTo.class);
//키값이랑 같이 넣어주기
thankDTo.setThankPK(dataSnapshot.getKey());
//Activity root = getActivity(); //이 클래스가 프레그먼트이기 때문에 액티비티 정보를 얻는다.
//Toast.makeText(root, thankDTo.getName()+"/"+ thankDTo.getComment(), Toast.LENGTH_SHORT).show();
names.add(thankDTo.getName());
dates.add(thankDTo.getCreatetime());
contents.add(thankDTo.getComment());
thankPK.add(thankDTo.getThankPK());
userKey.add(thankDTo.getUserkey());
int a = names.size();
String aa = String.valueOf(a);
Log.d("myTagrsult", aa);
//이거를 해줘야지 adapter getView가 호출이 된다!!!!중요!!!
ca.notifyDataSetChanged();
//Toast.makeText(root, aa , Toast.LENGTH_SHORT).show();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
커스텀 레이아웃
반응형
'매일코딩 > firebase 안드로이드 테스트' 카테고리의 다른 글
firebase 안드로이드 1 단계 - 설정 로그인 가입 기능 (0) | 2018.02.16 |
---|
댓글