【发布时间】:2018-06-27 07:47:16
【问题描述】:
我有我的应用程序,我需要显示有关在列表视图中单击的项目的信息。然而,这是存储在我的 firebase 数据库中的数据。数据库如下所示:
现在我想单击列表视图项,以便我可以在不同的活动中显示与其对应的信息。
存储listview和Firebase的MainActivity的代码是:
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
DrawerLayout drawer;
ActionBarDrawerToggle toggle;
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference mDatabaseReference;
private ChildEventListener mChildEventListener;
private FirebaseAuth mFirebaseAuth;
private FirebaseAuth.AuthStateListener mAuthStateListener;
public TicketAdapter adapter;
private final static int RC_SIGN_IN = 2;
public String mUsername;
public static String ComplaintID;
public static String StatusImg;
public static String TicketCat;
public static String SubCat;
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mFirebaseAuth = FirebaseAuth.getInstance();
mFirebaseDatabase = FirebaseDatabase.getInstance();
mDatabaseReference = mFirebaseDatabase.getReference().child("Ticket");
mAuthStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = mFirebaseAuth.getCurrentUser();
if (user != null) {
onSignedInInitialized(user.getDisplayName());
} else {
onSignedOutCleanup();
startActivityForResult(
getInstance()
.createSignInIntentBuilder()
.setIsSmartLockEnabled(false)
.setAvailableProviders(Arrays.asList(
new AuthUI.IdpConfig.EmailBuilder().build(),
new AuthUI.IdpConfig.GoogleBuilder().build()))
.build(),
RC_SIGN_IN);
}
}
};
final ListView listView = (ListView)findViewById(R.id.lvTicket);
final ArrayList<Ticket> arrayOfTicket = new ArrayList<>();
adapter = new TicketAdapter(this, arrayOfTicket);
listView.setAdapter(adapter);
mDatabaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Ticket ticket = (Ticket)dataSnapshot.getValue(Ticket.class);
adapter.add(ticket);
adapter.notifyDataSetChanged();
assert ticket != null;
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
mDatabaseReference = FirebaseDatabase.getInstance().getReference();
final DatabaseReference TicketCategory = mDatabaseReference.child("Ticket").child("ticketCategory");
TicketCategory.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String TCategory = dataSnapshot.child("ticketCategory").getValue(String.class);
TicketCat = TCategory;
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Ticket ticket = new Ticket();
Intent intent = new Intent(view.getContext(), ComplaintDetail.class);
startActivity(intent);
}
});
final Button button = (Button) findViewById(R.id.complaintbutton);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, TicketCategory.class);
startActivity(intent);
}
}
);
}
@Override
protected void onPostCreate(Bundle savedInstanceState)
{
super.onPostCreate(savedInstanceState);
toggle.syncState();
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId())
{
case R.id.action_settings:
{
AuthUI.getInstance().signOut(this);
return true;
}
default:
return super.onOptionsItemSelected(item);
}
}
private void detachDatabaseReadListener()
{
if(mChildEventListener != null)
{
mDatabaseReference.removeEventListener(mChildEventListener);
mChildEventListener = null;
}
}
@Override
protected void onResume()
{
super.onResume();
mFirebaseAuth.addAuthStateListener(mAuthStateListener);
}
@Override
protected void onPause()
{
super.onPause();
mFirebaseAuth.removeAuthStateListener(mAuthStateListener);
}
private void onSignedInInitialized(String username)
{
mUsername = username;
// attachDatabaseReadListener();
}
private void onSignedOutCleanup()
{
mUsername = null;
}
这是我要显示孩子的活动的代码:
public class ComplaintDetail extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_complaint_detail);
TextView tvComplaintID = (TextView)findViewById(R.id.complaintid);
TextView tvTicketCat = (TextView)findViewById(R.id.TicketHeading);
TextView tvSubCat = (TextView)findViewById(R.id.Subheading);
//tvComplaintID.setText(MainActivity.StatusImg);
tvTicketCat.setText( MainActivity.TicketCat);
// tvSubCat.setText(MainActivity.SubCat);
final Button butt = findViewById(R.id.review);
butt.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent intent = new Intent(ComplaintDetail.this, Review.class);
startActivity(intent);
}
});
final Button button = findViewById(R.id.close);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Toast.makeText(ComplaintDetail.this, "This ticket is closed!!", Toast.LENGTH_SHORT).show();
}
});
}}
我想显示孩子:ticketCategory、子类别和状态。 我将非常感谢任何帮助。 谢谢!!
[编辑]
public class Ticket {
String ticketCategory;
String name;
String complaintID;
String subcategory;
String priority;
String status;
private String comments;
private String cannedReply;
public Ticket(){}
public Ticket (String ticketCategory, String subcategory, String priority, String status, String comments, String cannedReply)
{
this.ticketCategory = ticketCategory;
// this.Name = Name;
this.subcategory = subcategory;
this.priority = priority;
this.status = status;
this.comments = comments;
this.cannedReply = cannedReply;
}
public void setTicketCategory(String ticketCategory) {
this.TicketCategory = ticketCategory;
}
public void setName(String name) {
this.Name = name;
}
public void setSubcategory(String subcategory) {
this.Subcategory = subcategory;
}
public void setPriority(String priority) {
this.priority = priority;
}*/
public void setStatus(String status) {
this.status = status;
}
public String getTicketCategory() {
return ticketCategory;
}
public String getSubcategory() {
return subcategory;
}
public String getPriority() {
return priority;
}
public String getComments() {
return comments;
}
public void setComments(String comments) {
this.comments = comments;
}
public String getCannedReply() {
return cannedReply;
}
public void setCannedReply(String cannedReply) {
this.cannedReply = cannedReply;
}
public String getStatus() {return status;}
public String getComplaintID() {
return complaintID;
}
public static ArrayList<Ticket> getTicket()
{
ArrayList<Ticket> tickets = new ArrayList<Ticket>();
return tickets;
}}
【问题讨论】:
标签: android firebase listview firebase-realtime-database