2017-04-22 76 views
2

我想要onItem點擊列表視圖並進入DetailsPage以顯示詳細信息,但它讓我爲空。 ListView中的項目是圖片網址,名稱和地址。 DetailsPage中的項目是圖片網址,名稱,地址,聯繫人和類別。無法使用onItemClickListener獲取數據

Image of the view on my phone when get null

這是我ListViewPage

public class ImageListActivity extends AppCompatActivity { 

private DatabaseReference mDatabaseRef; 
private List<ImageUpload> imgList; 
private ListView lv; 
private ImageListAdapter adapter; 
private ProgressDialog progressDialog; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_image_list); 
    imgList = new ArrayList<>(); 
    lv = (ListView) findViewById(R.id.listViewImage); 
    progressDialog = new ProgressDialog(this); 
    progressDialog.setMessage("Please wait loading list image..."); 
    progressDialog.show(); 

    mDatabaseRef = FirebaseDatabase.getInstance().getReference(WorkshopsInfoActivity.FB_DATABASE_PATH); 

    mDatabaseRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      progressDialog.dismiss(); 
      for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
       ImageUpload img = snapshot.getValue(ImageUpload.class); 
       imgList.add(img); 
      } 
      adapter = new ImageListAdapter(ImageListActivity.this, R.layout.image_item, imgList); 
      lv.setAdapter(adapter); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

      progressDialog.dismiss(); 
     } 
    }); 
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      Intent intent = new Intent(getApplicationContext(), DetailsOfWorkshops.class); 
      startActivity(intent); 
     } 
    }); 
}} 

這是我DetailsPage

public class DetailsOfWorkshops extends AppCompatActivity { 

DatabaseReference mDatabaseRef; 
List<ImageUpload> listImage; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_details_of_workshops); 
    mDatabaseRef = FirebaseDatabase.getInstance().getReference(WorkshopsInfoActivity.FB_DATABASE_PATH); 
    mDatabaseRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      ImageUpload img = dataSnapshot.getValue(ImageUpload.class); 

      String name = img.getName(); 
      String address = img.getAddress(); 
      String contact = img.getContact(); 
      String category = img.getCategory(); 


      final TextView textViewDetails = (TextView) findViewById(R.id.tvName); 
      String string = "Name: " + name + "\nAddress: " + address + "\nContact: " + contact + "\nCategory: " + category + "\n\n"; 
      textViewDetails.setText(string); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
}} 

回答

0

你送什麼給細節等級:

Intent intent = new Intent(getApplicationContext(), DetailsOfWorkshops.class); 
     startActivity(intent); 

嘗試使用此:

YourClass item = (YourClass) adapterView.getAdapter().getItem(position); 
Intent intent = new Intent(getApplicationContext().this, DetailsOfWorkshops.class); 
Bundle bundle = new Bundle(); 
bundle.putString("valueName", value); 
intent.putExtra("MyPackage", bundle); 
startActivity(intent); 
+0

對不起,我仍然無法得到它。我的DetailsPage中的代碼有問題嗎? –

+0

問題先生是您不會將任何內容從ImageListActivity發送到DetailsPage活動,以指示要顯示哪個項目。請像上面的Rajesh傢伙一樣做,看看不同。 – julanove

0

我們需要從ActivityOne發送一些數據通過意圖ActivityTwo然後訪問ActivityTwo數據並將其設置爲所需的TextView。

請在ActivityOne中查看以下代碼。

public class ImageListActivity extends AppCompatActivity { 

private DatabaseReference mDatabaseRef; 
public List<ImageUpload> imgList; 
private ListView lv; 
private ImageListAdapter adapter; 
private ProgressDialog progressDialog; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_image_list); 
    imgList = new ArrayList<>(); 
    lv = (ListView) findViewById(R.id.listViewImage); 
    progressDialog = new ProgressDialog(this); 
    progressDialog.setMessage("Please wait loading list image..."); 
    progressDialog.show(); 

    mDatabaseRef = FirebaseDatabase.getInstance().getReference(WorkshopsInfoActivity.FB_DATABASE_PATH); 

    mDatabaseRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      progressDialog.dismiss(); 
      for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
       ImageUpload img = snapshot.getValue(ImageUpload.class); 
       imgList.add(img); 
      } 
      adapter = new ImageListAdapter(ImageListActivity.this, R.layout.image_item, imgList); 
      lv.setAdapter(adapter); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

      progressDialog.dismiss(); 
     } 
    }); 
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

      ImageUpload itemData = imgList.get(i); 
      Intent intent = new Intent(getApplicationContext(), DetailsOfWorkshops.class); 
      intent.putExtra("name", itemData.getName()); 
      intent.putExtra("address", itemData.getAddress()); 
      intent.putExtra("contact", itemData.getContact());  
      intent.putExtra("category", itemData.getCatogory());  
      startActivity(intent); 
     } 
    }); 
}} 

檢查出一些變化ActivityTwo

public class DetailsOfWorkshops extends AppCompatActivity { 

DatabaseReference mDatabaseRef; 
List<ImageUpload> listImage; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_details_of_workshops); 

    String name = getIntent().getStringExtra("name"); 
    String address = getIntent().getStringExtra("address"); 
    String contact = getIntent().getStringExtra("contact"); 
    String category = getIntent().getStringExtra("category"); 


    TextView textViewDetails = (TextView) findViewById(R.id.tvName); 
    String string = "Name: " + name + "\nAddress: " + address + "\nContact: " + contact + "\nCategory: " + category + "\n\n"; 
    textViewDetails.setText(string); 

    mDatabaseRef = FirebaseDatabase.getInstance().getReference(WorkshopsInfoActivity.FB_DATABASE_PATH); 
    mDatabaseRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      ImageUpload img = dataSnapshot.getValue(ImageUpload.class); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
}} 

希望這會有所幫助。

@Rajesh

+0

非常感謝。這是工作 –

0

嘗試onItemSelected聽衆,而不是onItemClick監聽器這會給你它可以幫助您獲得特定對象想要 其數據然後你就可以適當值發送額外的位置

 ImageUpload itemData = imgList.get(pos); 
     Intent intent = new Intent(getApplicationContext(), 
     DetailsOfWorkshops.class); 
     intent.putExtra("name", itemData.getName()); 
     intent.putExtra("address", itemData.getAddress()); 
     intent.putExtra("contact", itemData.getContact());  
     intent.putExtra("category", itemData.getCatogory());  
     startActivity(intent); 

OnClick監聽器適用於整個視圖而不是特定元素byt OnSelected給出您在列表中選擇的項目的位置查看