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) {

}
});
}

}



커스텀 레이아웃







  1. dk0011 2018.10.11 14:59

    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가 호출이 된다!!!!중요!!!

    여기서 정확히 어떤 코드가 adapter의 getView가 호출이 된다는건지 알려주실 수 있나요?

    • 나그네 2019.09.09 17:24

      1년 뒤 지나가던 나그네가 답합니다만...
      다른 공부하시는 분들 도움이 되고자ca.notifyDataSetChanged();
      이 코드가 adapter의 getView를 호출해줍니다.

+ Recent posts