簡體   English   中英

Android getIntent在新數據上獲取舊數據

[英]Android getIntent gets old data instead on new one

我是android應用程序的新手。我正在開發一個聊天應用程序。我使用了RecyclerView和recyclerview適配器內部,我在活動開始時傳遞了一個數據

那是我下面的代碼

ChatAdapter.java // MyViewHolder

class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        TextView name;
        ImageView img,status;

        public MyViewHolder(View itemView) {
            super(itemView);
            name= (TextView) itemView.findViewById(R.id.name);
            img= (ImageView) itemView.findViewById(R.id.img);
            status=(ImageView)itemView.findViewById(R.id.status);
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {
            int position=getAdapterPosition();
            UsersList current=data.get(position);
            Intent intent=new Intent(context,ChatRoomActivity.class);
            intent.putExtra("NAME",current.name);
            intent.putExtra("USERNAME",current.username);
            **Log.wtf("CAAAAA","USERNAME "+current.username);**
            context.startActivity(intent);
        }
    }

每當我點擊回收站視圖時,它就會傳遞正確的數據,但是當我按返回按鈕並單擊recylclerview(other)時,它將傳遞錯誤的數據

我已經通過Log(粗體)進行了檢查,顯示了正確的數據,但是我不知道為什么在活動中接收到錯誤的數據。 請幫助我。您的回復對我來說將非常有價值

getAdapterPosition()

返回此ViewHolder表示的項目的Adapter位置。

注意

可能有別於getLayoutPosition()(如果有待處理的適配器更新,但尚未進行新的布局傳遞)。 在下一次遍歷布局之前,RecyclerView不會處理任何適配器更新。 這可能會在用戶在屏幕上看到的內容與適配器的內容之間產生暫時的不一致。 這種不一致並不重要,因為它將小於16ms,但是如果您想使用ViewHolder位置來訪問適配器,則可能會出現問題。 有時,您可能需要獲取確切的適配器位置才能響應用戶事件執行某些操作。 在這種情況下,應使用此方法來計算ViewHolder的Adapter位置。

我解決了!! 實際上,舊的意圖數據的原因是廣播接收器。當活動恢復時,廣播接收器發送舊數據。因此,我們需要取消注冊廣播接收器

這是我的下面的代碼

@Override
    protected void onDestroy() {
        LocalBroadcastManager.getInstance(this).unregisterReceiver(messageReceiver2);
        LocalBroadcastManager.getInstance(this).unregisterReceiver(messageReceiver3);
        LocalBroadcastManager.getInstance(this).unregisterReceiver(messageReceiver4);
        super.onDestroy();
    }

在目標活動中使用getIntent().getStringExtra("USERNAME")

編輯:

UsersList current =new UsersList();
 current.name=getIntent().getStringExtra("NAME");
current.username=getIntent().getStringExtra("USERNAME");

new Thread(new Runnable() { (At)
Override public void run() { 
adapter=new ChatroomAdapter(ChatRoomActivity.this,dbHelperChatRoom.getMessages(current))‌​;

runOnUiThread(new Runnable() { 
@Override public void run() 
{ recyclerView.setAdapter(adapter); 
} }); } }).start(); 

您需要為清單中的活動更改操作名稱。

它應該是<action android:name="android.intent.action.VIEW" />而不是<action android:name="android.intent.action.MAIN" />

android.intent.action.MAIN的文檔規定以下內容:活動操作:表示此活動是應用程序的入口點,即,當您啟動應用程序時,將創建此活動,並且不希望接收數據。

暫無
暫無

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

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