2017-07-02 10 views
0

私の目標は、ユーザーが「プロトコル」(EditorActivity)を作成し、ユーザがリストビュー(CatalogActivity)でそれらを見ることができる2つの異なるアクティビティを持つアプリケーションを作成することです)。プロトコルに何らかの問題がある場合、ユーザーはリストビュー内のリストビュー項目の1つを押すことができなければならず、そこからEditorActivityに戻り、特定の項目を編集します。androidのFirebase onClickリスト

私の問題は、CatalogActivityから古いデータをEditorActivityに取得する方法を理解していないことです。

firebaseコンソールから: [Firebase構造] [1]

CustomProtocol:CatalogActivityから

public class CustomProtocol { 
    public String dateDrill; 
    public String pileID; 
    public boolean cleaned; 
    public CustomProtocol() { 
    } 


    public CustomProtocol(String pileID, 
          String dateDrill, 

          boolean cleaned) { 
     this.pileID = pileID; 
     this.dateDrill = dateDrill; 
     this.cleaned = cleaned; 
    } 

    public void setPileID(String pileID) { 
     this.pileID = pileID; 
    } 

    public String getPileID() { 
     return pileID; 
    } 

    public void setDateDrill(String dateDrill) { 
     this.dateDrill = dateDrill; 
    } 

    public String getDateDrill() { 
     return dateDrill; 
    } 
} 

スニペット:

 final String projectNumber = projectPrefs.getString(getString(R.string.settings_project_number_key), getString(R.string.settings_project_number_by_default)); 

      mFirebaseDatabase = FirebaseDatabase.getInstance(); 
      mProtocolDatabaseReference = mFirebaseDatabase.getReference().child(projectNumber); 


      List<CustomProtocol> protocols = new ArrayList<>(); 
      mProtocolAdapter = new ProtocolAdapter(this, R.layout.item_protocol, protocols); 

      mProtocolListView.setAdapter(mProtocolAdapter); 
      attachDatabaseReadListener(); 

      mProtocolListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 

        Intent intent = new Intent(CatalogActivity.this, EditorActivity.class); 

       intent.putExtra("Exiting protocol", EXISTING_PROTOCOL); 
        } 
      }); 
     } 

EditorActivty:

public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_editor); 

EXISTING_PROTOCOL = intent.getBooleanExtra("Exiting protocol", false); 
    mEditorFirebaseDatabase = FirebaseDatabase.getInstance(); 
      mEditorProtocolDatabaseReference = 
mEditorFirebaseDatabase.getReference().child(projectNumber); 

if (EXISTING_PROTOCOL) 

      mProtocolDatabaseReference.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
       //WHAT GOES HERE SO THAT I CAN POPULATE THE TEXTVIEWS IN THE ACTIVITY_EDITOR WITH THE EXISTING VALUES? 
       }} 

そしてこれの後に私は立ち往生しています。私はEditorActivityのdatabasereferenceに何かを追加しなければならないと思いますが、何が分かりませんか?リスト項目がクリックされるまで、私はpileIDを知らないので?これを行う簡単な方法はありますか?

ありがとうございます!

1]:https://i.stack.imgur.com/Bt1mZ.png

答えて

0

1.Make CustomProtocol Parcelableは、IDEが自動的に

2.Passが意図を使用してEditorActivityにCatalogActivityからプロトコルをクリック
public class CustomProtocol implements Parcelable { 
    public String dateDrill; 
    public String pileID; 
    public boolean cleaned; 

    public CustomProtocol() { 
    } 


    public CustomProtocol(String pileID, 
         String dateDrill, 

         boolean cleaned) { 
    this.pileID = pileID; 
    this.dateDrill = dateDrill; 
    this.cleaned = cleaned; 
    } 

    protected CustomProtocol(Parcel in) { 
    dateDrill = in.readString(); 
    pileID = in.readString(); 
    cleaned = in.readByte() != 0; 
    } 

    public static final Creator<CustomProtocol> CREATOR = new Creator<CustomProtocol>() { 
    @Override 
    public CustomProtocol createFromParcel(Parcel in) { 
     return new CustomProtocol(in); 
    } 

    @Override 
    public CustomProtocol[] newArray(int size) { 
     return new CustomProtocol[size]; 
    } 
    }; 

    public void setPileID(String pileID) { 
    this.pileID = pileID; 
    } 

    public String getPileID() { 
    return pileID; 
    } 

    public void setDateDrill(String dateDrill) { 
    this.dateDrill = dateDrill; 
    } 

    public String getDateDrill() { 
    return dateDrill; 
    } 

    @Override 
    public int describeContents() { 
    return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel parcel, int i) { 
    parcel.writeString(dateDrill); 
    parcel.writeString(pileID); 
    parcel.writeByte((byte) (cleaned ? 1 : 0)); 
    } 
} 

mProtocolListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 

      Intent intent = new Intent(CatalogActivity.this, EditorActivity.class); 

     intent.putExtra("Exiting protocol", EXISTING_PROTOCOL); 
     intent.putExtra("Clicked protocol object", protocols.get(position)); 
      } 
    }); 

3.Inエディタそれを行うことができますアクティビティは、インテントを介してクリックされたプロトコルを読み込みます。

EXISTING_PROTOCOL = intent.getBooleanExtra("Exiting protocol", false); 
protocol = intent.getParcelableExtra("Clicked protocol object"); 

4.

public void onDataChange(DataSnapshot dataSnapshot) { 
       //WHAT GOES HERE SO THAT I CAN POPULATE THE TEXTVIEWS IN THE ACTIVITY_EDITOR WITH THE EXISTING VALUES? 
// Ans: Find text views by id and set corresponding text from protocol read above. 
       }} 
1

あなたが意図を通じてList<CustomProtocol>を渡すことができます。 カスタムプロトタイプは、パーセル可能を実装する必要があります。

Same question is here