FirebaseからrecyclerViewを取り込もうとしています。アイテムをデータベースに追加すると、最終的にはrecyclerViewもうまく動作します(コンソールから見ることも、Androidのモニターのタグから見ることもできます)。 RVが読み込まれ、listItemsの内部に、テキストをデータベースから取得する2つのTextViewがあります。RecyclerViewはFirebase Datasnapshotからデータを取得しません。
私の問題は、これら2つのtextViewが表示されないということです。私は多くの研究を行い、私の問題は脱直列化だと思う。
ここから私は、フラグメントを通じてアイテムを追加している:
public void addLanguage(){
//ADDING A LANGUAGE COLOR CAN BE DONE HERE THROUGH AN ARRAY ON MANUALLY
String mUserId= fUser.getUid();
final FirebaseDatabase database= FirebaseDatabase.getInstance();
final DatabaseReference fDatabase= FirebaseDatabase.getInstance().getReference();
//String key= database.getReference("languagesList").push().getKey();
String key= fDatabase.child("user").child(mUserId).child("languagesList").push().getKey();
Languages language= new Languages();
language.setSourceLanguage(sources_edit.getText().toString());
language.setTargetLanguage(target_edit.getText().toString());
Map<String, Object> childUpadate= new HashMap<>();
childUpadate.put(key, language.toFirbaseObject());
fDatabase.child(mUserId).child("languagesList").updateChildren(childUpadate, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if (databaseError == null) {
dismiss();
}else{
Toast.makeText(getActivity(), databaseError.getMessage(), Toast.LENGTH_LONG).show();
}
}
});
}
は、ここでRVは
public void loadData(){
databaseRef.child(mUserId).child("languagesList").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
languagesList.clear();
Log.w("langApp", "getUser:onCancelled " + dataSnapshot.toString());
Log.w("langApp", "count = " + String.valueOf(dataSnapshot.getChildrenCount()) + " values " + dataSnapshot.getKey());
for(DataSnapshot data : dataSnapshot.getChildren()){
// GenericTypeIndicator<Map<String, Languages >> languageMap= new GenericTypeIndicator<Map<String, Languages>>(){};
// Map<String, Languages> language= dataSnapshot.getValue(languageMap);
Languages languages= data.getValue(Languages.class);
languagesList.add(languages);
}
adapter.notifyDataSetChanged();
spinKitView.setVisibility(View.GONE);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w("langApp", "getUser:onCancelled", databaseError.toException());
}
});
}
に位置していますし、ここに私のObjectクラスは
public class Languages implements Serializable {
public String sourceLanguage, targetLanguage;
public Languages(){
}
public String getSourceLanguage() {
return sourceLanguage;
}
public void setSourceLanguage(String sourceLanguage) {
this.sourceLanguage = sourceLanguage;
}
public String getTargetLanguage() {
return targetLanguage;
}
public void setTargetLanguage(String targetLanguage) {
this.targetLanguage = targetLanguage;
}
public HashMap<String, String> toFirbaseObject(){
HashMap<String, String> language= new HashMap<String, String>();
language.put("source", sourceLanguage);
language.put("target", targetLanguage);
return language;
}
}
である私の活動です
アクティビティ内の内部クラスであるRVアダプタ
public class RecyclerAdapter extends RecyclerView.Adapter{
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
RecyclerAdapter.mViewHolder cVH= new mViewHolder(v);
return cVH;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
mViewHolder mViewHolder= (mViewHolder)holder;
mViewHolder.position= position;
Languages languages= languagesList.get(position);
((mViewHolder) holder).sourceText.setText(languages.getSourceLanguage());
((mViewHolder) holder).targetText.setText(languages.getTargetLanguage());
}
@Override
public int getItemCount() {
return languagesList.size();
}
public final class mViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
TextView sourceText, targetText;
public int position;
public mViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
sourceText= (TextView)itemView.findViewById(R.id.source_language);
targetText= (TextView)itemView.findViewById(R.id.target_language);
}
@Override
public void onClick(View v) {
}
}
}
JSON
{
{ "kVRxDib8SJdQWRc1TULthqY7S6e2" : {
"languagesList" : {
"-Kv2fKiiV5XAjo6lW9Eg" : {
"source" : "Kejan",
"target" : "Dachn"
},
"-Kv2hoV2eIEMcme6Akje" : {
"source" : "Se",
"target" : "Se"
},
"-Kv2iPJqEn7l6hP4gEzI" : {
"source" : "Ay ",
"target" : "Way"
},
"-Kv38J06mO8o1YudzXXY" : {
"source" : "Aaa",
"target" : "Zdsss"
},
"-Kv38d9b5ihF2sMADk3t" : {
"source" : "Madri ",
"target" : "Algomar"
}
}
}
}
マニフェスト: `
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity android:name=".Authentication.SignupActivity" />
<activity android:name=".Authentication.ResetPasswordActivity" />
<activity android:name=".Authentication.LoginActivity" />
<activity android:name=".Authentication.ProfileSettings" />
<activity
android:name=".DrawerActivity"
android:label="@string/title_activity_drawer"
android:theme="@style/AppTheme" />
<activity
android:name=".LanguagesActivity"
android:label="@string/title_activity_languages"
android:theme="@style/AppTheme" />
<activity android:name=".Settings" />
<activity android:name=".Authentication.SignupActivityTwo"></activity>
</application>
`
ねえ、それは動作しませんでしたしてみてくださいwork.Justよかもしれ
adapter.notifyDataSetChange
後のデータのロード中にrecyclerView.setAdapter(adapter);
を追加しよう。ニックアレンは答えを持っています。とにかく、ありがとう。 – Sruda