单击卡片视图时,如何在其他活动中显示详细信息



我遇到了问题,如何根据cardView的位置显示其值?我觉得我有点错过了什么。

这是我的代码

@Override
public void onBindViewHolder(AnnouncementViewHolder holder, int position) {
AnnouncementModel announcement = announcementList.get(position);
if (announcement.getImage()!=null && !announcement.getImage().isEmpty()){
Picasso.get()
.load(announcement.getImage())
// To fit image into imageView
.fit()
// To prevent fade animation
.noFade()
.into(holder.imageView);
}else{
//Do nothing
}
holder.textViewDate.setText(announcement.getDate());
holder.textViewTitle.setText(announcement.getTitle());
holder.textViewExcerpt.setText(announcement.getExcerpt());
}
@Override
public int getItemCount() {
return announcementList.size();
}
class AnnouncementViewHolder extends RecyclerView.ViewHolder {
TextView textViewTitle, textViewExcerpt,textViewDate;
ImageView imageView;
public AnnouncementViewHolder(View itemView) {
super(itemView);
textViewDate = itemView.findViewById(R.id.textAnnouncementDate);
textViewTitle = itemView.findViewById(R.id.textAnnouncementDesc);
textViewExcerpt = itemView.findViewById(R.id.textAnnouncementDesc);
imageView = itemView.findViewById(R.id.AnnouncementImageView);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context = v.getContext();
Intent intent = new Intent(context, DetailActivityAnnouncement.class);
intent.putExtra(DetailActivity.EXTRA_POSITION, getAdapterPosition());
context.startActivity(intent);
}
});
}
}

我想在单击时显示textViewDate和对我的其他活动的textViewTitle

这是我的detailActvity

public class DetailActivity extends AppCompatActivity {

public static final String EXTRA_POSITION = "position";
AnnouncementModel model;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail_announcement);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

int postion = getIntent().getIntExtra(EXTRA_POSITION, 0);
TextView announcementContent = (TextView) findViewById(R.id.textAnnouncementContext);
TextView announcementDate = (TextView) findViewById(R.id.textAnnouncementDate);
ImageView announcementImage = (ImageView) findViewById(R.id.AnnouncementImageView);
TextView announcementOtherDetails = (TextView) findViewById(R.id.textAnnouncementOtherDetails);

}
}

我觉得我已经接近我的答案了,但我仍然被困住了。任何帮助将不胜感激。

您可以使用 Intent 将数据从一个活动发送到另一个活动。

itemView.setOnClickListener()中,您已经定义了打开DetailActivity的意图。

现在您需要做的就是添加数据,例如

Context context = v.getContext();
Intent intent = new Intent(context, DetailActivityAnnouncement.class);
intent.putExtra(DetailActivity.EXTRA_POSITION, getAdapterPosition());
// putExtra can be used to send data with intent, here "date"
// and "title" is key that we will need later to access these values 
intent.putExtra("date",announcementList.get(getAdapterPosition()).getDate());
intent.putExtra("title", announcementList.get(getAdapterPosition()).getTitle());
context.startActivity(intent);

DetailActivity中,您可以在onCreate方法中检索此信息

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail_announcement);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

int postion = getIntent().getIntExtra(EXTRA_POSITION, 0);
//you can retrieve data from intent like
String textViewDate = getIntent().getStringExtra("date");
String textViewTitle = getIntent().getStringExtra("title");
TextView announcementContent = (TextView) findViewById(R.id.textAnnouncementContext);
TextView announcementDate = (TextView) findViewById(R.id.textAnnouncementDate);
ImageView announcementImage = (ImageView) findViewById(R.id.AnnouncementImageView);
TextView announcementOtherDetails = (TextView) findViewById(R.id.textAnnouncementOtherDetails);

}

另外:-您应该始终检查您是否已从意图接收数据textViewDate, textViewTitle并确保不为空。

您还可以在检索活动(如if(getIntent().hasExtra("date"))(中的数据之前进行检查,如果您有数据,那么它将是真的。

我建议你做一个界面

public interface DeviceClickedInterface {
void DeviceSelectedInterface(int position);
}

并在您的适配器中将其传递给类

private DeviceClickedInterface deviceClickedInterface;
public DevicesAdapter( DeviceClickedInterface deviceClickedInterface, ... the rest of params.) {
//other params. init.
this.deviceClickedInterface = deviceClickedInterface;
}

使AnnouncementViewHolder也包含itemView作为子项,并在onBindViewHolder内在itemView上添加ClickListener

holder.itemView.setOnClickListener(v -> deviceClickedInterface.DeviceSelectedInterface(position));

最后,DetailActivity实现您自己的DeviceClickedInterface,它将覆盖您的活动中DeviceSelectedInterface方法,该方法将在您每次单击CardView时返回位置

我认为与其将位置传递给详细信息活动,不如尝试在意图中传递日期和标题(而不仅仅是位置(,然后在详细信息活动中同时显示它们,或者您可以使您的公告对象可包裹,然后将其传递到意图本身中,这样您就可以获得所有详细信息。 您可以为项目视图设置标签 使用itemView.setTag(),然后使用itemView.getTag()获取对象

最新更新