无法使用onItemClickListener获取数据
问题描述:
我想要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) {
}
});
}}
答
你送什么给细节等级:
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);
答
我们需要从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
非常感谢。这是工作 –
答
尝试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给出您在列表中选择的项目的位置查看
对不起,我仍然无法得到它。我的DetailsPage中的代码有问题吗? –
问题先生是您不会将任何内容从ImageListActivity发送到DetailsPage活动,以指示要显示哪个项目。请像上面的Rajesh家伙一样做,看看不同。 – julanove