簡體   English   中英

單擊 Cardview 時如何在另一個活動中顯示詳細信息

[英]How can I display the details in another activity when Cardview is clicked

我遇到了問題,如何根據位置顯示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);
                }
            });

        }
    }

我想在單擊時向我的其他活動顯示textViewDatetextViewTitle

這是我的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);


    }

}

我覺得我已經接近我的答案了,但我仍然被困住了。 任何幫助將非常感激。

您可以使用意圖將數據從一個活動發送到另一個活動。

在您的itemView.setOnClickListener()您已經定義了打開DetailActivity的 Intent 。

現在您需要做的就是添加帶有意圖的數據,例如

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"))如果您有數據,那么它將為真。

我認為,而不是僅將位置傳遞給詳細信息活動,您應該嘗試在意圖中傳遞日期和標題(而不僅僅是位置),然后將它們都放在詳細活動中以顯示它,或者您可以使您的公告對象可打包,然后將它傳遞給意圖本身,這樣您就可以獲得所有詳細信息。 您可以使用標簽設置為ItemView控件itemView.setTag()然后讓使用對象itemView.getTag()

我建議你做一個接口

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

並在您的 Adapter 中將其傳遞給 Class

private DeviceClickedInterface deviceClickedInterface;

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

使AnnouncementViewHolder包含itemView為孩子過了,里面onBindViewHolder附加ClickListeneritemView

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

最后使DetailActivity實現您自己的DeviceClickedInterface它將覆蓋您的 Activity 中的DeviceSelectedInterface方法,該方法將在您每次單擊CardView時返回位置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM