2017-04-22 47 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给出您在列表中选择的项目的位置查看