2016-09-18 4 views
0

Firebaseデータベースから始めます。私はDBに項目をプッシュできる小さなタスクトラッカーアプリケーションを作った。 Firebase UIとFriebaseRecyclerViewを使用しています。FirebaseUIの更新FirebaseRecyclerViewユーザのクリックによる子ども

問題はfirebaseRecyclerViewから項目のクリックで子を更新できません。以下は私のビューホルダーのコードです。しかし、チェックボックスのクリックでは、DBは期待どおりに更新されません。また、以下に

public static class TaskViewHolder extends RecyclerView.ViewHolder{ 
TextView title,description; 
CheckBox checkBox; 
FirebaseAuth mAuth; 
FirebaseUser firebaseUser; 
    public TaskViewHolder(View v) { 
     super(v); 
     title = (TextView) v.findViewById(R.id.title); 
     description= (TextView) v.findViewById(R.id.Description); 
     checkBox = (CheckBox) v.findViewById(R.id.checkboxTaskRow); 

     mAuth = FirebaseAuth.getInstance(); 
     firebaseUser = mAuth.getCurrentUser(); 
     checkBox.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       RecyclerView recyclerView = (RecyclerView) v.findViewById(R.id.taskList); 
       final FirebaseRecyclerAdapter firebaseRecyclerAdapter = (FirebaseRecyclerAdapter) recyclerView.getAdapter(); 
       if(checkBox.isChecked()) { 
        SpannableString content = new SpannableString(title.getText()); 
        content.setSpan(new StrikethroughSpan(), 0, content.length(), 0); 
        title.setText(content); 
        content = new SpannableString(description.getText()); 
        content.setSpan(new StrikethroughSpan(), 0, content.length(), 0); 
        description.setText(content); 
       } 
       else 
       { 
        description.setText(description.getText().toString()); 
        title.setText(title.getText().toString()); 
       } 
      } 
     }); 

    } } 

私のアダプタのコードである

final FirebaseRecyclerAdapter<UnitTask,TaskViewHolder> adapter = 
      new FirebaseRecyclerAdapter<UnitTask, TaskViewHolder>(UnitTask.class,R.layout.task,TaskViewHolder.class,userRef) { 
       @Override 
       protected void populateViewHolder(TaskViewHolder viewHolder, UnitTask model, int position) { 
        mAuth = FirebaseAuth.getInstance(); 
        firebaseUser = mAuth.getCurrentUser(); 
        viewHolder.title.setText(model.getTitle()); 
        viewHolder.description.setText(model.getDescription()); 
        viewHolder.checkBox.setChecked(model.isCompleted()); 
       } 


      }; 

マイUnitTaskクラス

public class UnitTask { 

public String title; 
public String description; 
boolean completed; 

public UnitTask(String title, String description, boolean completed) { 
    this.title = title; 
    this.description = description; 
    this.completed = completed; 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

public String getDescription() { 
    return description; 
} 

public void setDescription(String description) { 
    this.description = description; 
} 

public boolean isCompleted() { 
    return completed; 
} 

public void setCompleted(boolean completed) { 
    this.completed = completed; 
} 

public UnitTask() { 
    // Do Nothing 
} 

} 

すべてのヘルプははるかに高く評価されます。また、私はアンドロイドから始めているので、愚かなミスをすることを期待しています。

おかげ

答えて

1

あなたの目的を得るために周りの作業は次のとおりです。

1)ときのアイテムのユーザチェックは、firebaseデシベルに「特別値」を押してみましょう。

2)FirebaseRecyclerAdapter#populateViewHolderで:

https://github.com/firebase/quickstart-android/blob/master/database

見てみましょう:項目は "特別な値を" 持っている場合は、Googleからの例を試してみてくださいレイアウト

UPDATE

を変更星のボタンの実装。

PostListFragment.javaにあなたが見つける:

// Determine if the current user has liked this post and set UI accordingly 
if (model.stars.containsKey(getUid())) { 
    viewHolder.starView.setImageResource(R.drawable.ic_toggle_star_24); 
} else { 
    viewHolder.starView.setImageResource(R.drawable.ic_toggle_star_outline_24); 
} 

// Bind Post to ViewHolder, setting OnClickListener for the star button 
viewHolder.bindToPost(model, new View.OnClickListener() { 
    @Override 
    public void onClick(View starView) { 
     // Need to write to both places the post is stored 
     DatabaseReference globalPostRef = mDatabase.child("posts").child(postRef.getKey()); 
     DatabaseReference userPostRef = mDatabase.child("user-posts").child(model.uid).child(postRef.getKey()); 

     // Run two transactions 
     onStarClicked(globalPostRef); 
     onStarClicked(userPostRef); 
    } 
}); 
+0

まあ、私は文句を言わない、一般的な解決策になると思います。この権利のためのソリューションが組み込まれているはずですか? –

+1

はい。 Googleは既に例を作り出している。ちょっと待って、私の更新の答えにそれを提供します。 – Robust

+0

ありがとう!それが本当に助けになりました。 –

0

@Muhammadハッサン・ニアジは、その内部のデータベースのレコードを更新する場合の条件のいずれかプッシュかのsetValueメソッドを使用して

+0

しかし、私は子供のための鍵を手に入れますか? –

関連する問題