2017-07-02 27 views
0

我的目标是创建一个基本应用程序有两个不同的活动,其中用户创建一个“协议”(EditorActivity),并在其中用户可以在列表视图中查看它们(CatalogActivity )。如果协议有问题,用户必须能够在列表视图中按下列表视图中的一个项目,并从那里返回到EditorActivity并编辑特定项目。在Android的Firebase onClick列表

我的问题是,我还没有想出如何将旧数据从CatalogActivity中获取到EditorActivity中。

从火力控制台: [火力地堡结构] [1]

CustomProtocol:

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; 
    } 
} 

片段从CatalogActivity:

 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的数据库引用中添加更多内容,但我无法弄清楚什么是什么?因为直到listitem被点击后我才知道pileID?有没有更简单的方法来做到这一点?

预先感谢您!

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

回答

0

词根记忆CustomProtocol Parcelable,IDE可以做到自动

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)); 
    } 
} 

2.Pass使用意图点击协议从CatalogActivity到EditorActivity,

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