2017-01-20 3 views
1

Я новичок в андроиде app.I занимается разработкой чат application.I использовал RecyclerView и внутри recyclerview адаптера я передаю один данные о начале деятельностиAndroid getIntent получает старые данные, а не на новом один

Это мой код ниже

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 (другой), то это ошибочный данные

Я проверил через журнал (жирный), там отображаются правильные данные, но я не знаю, почему в деятельности поступают неверные данные. Пожалуйста, помогите мне. Ваш ответ будет очень ценным для меня.

+0

что код в ChatRoomActivity.java? –

+0

intentUsername = getIntent(). GetExtras(). Get ("USERNAME"). ToString(); –

+0

Вы используете 'launchMode', кроме' standard' для 'ChatRoomActivity' в' manifest'? –

ответ

0

getIntent().getStringExtra("USERNAME") в Target activity.

EDIT:

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(); 
+0

Nope, did'nt work –

+0

Добавить запись журнала в целевую активность также и сравнить с ней отправителя. – SAM

+0

Добавьте код класса UsersList. – SAM

0

Вы должны изменить имя действий по деятельности в манифесте.

Это должно быть <action android:name="android.intent.action.VIEW" /> вместо <action android:name="android.intent.action.MAIN" />

Документов для android.intent.action.MAIN состояния следующие: Активность Действия: означает, что эта деятельность является точкой входа приложения, т.е. при запуске приложения , эта деятельность создается, не ожидает получения данных.

1
getAdapterPosition() 

Возвращает положение адаптера предмета, представленного этим ViewHolder.

Примечание

, что это может быть иным, чем getLayoutPosition(), если есть отложенные обновления адаптера, но новый макет проход еще не произошло. RecyclerView не обрабатывает обновления адаптера до следующего обхода макета. Это может создать временные несоответствия между тем, что пользователь видит на экране и каким содержимым адаптера. Эта несогласованность не важна, так как она будет меньше 16 мс, но это может быть проблемой, если вы хотите использовать позицию ViewHolder для доступа к адаптеру. Иногда вам может понадобиться получить точную позицию адаптера для выполнения некоторых действий в ответ на пользовательские события. В этом случае вы должны использовать этот метод, который будет вычислять позицию адаптера в ViewHolder.

1

У меня есть решение! На самом деле причина старых намерения данных передаются receiver.The радиовещательного приемник посылает старые данные, когда активность resumed.So поэтому мы должны unregisted широковещательных приемников

Вот мой код ниже

@Override 
    protected void onDestroy() { 
     LocalBroadcastManager.getInstance(this).unregisterReceiver(messageReceiver2); 
     LocalBroadcastManager.getInstance(this).unregisterReceiver(messageReceiver3); 
     LocalBroadcastManager.getInstance(this).unregisterReceiver(messageReceiver4); 
     super.onDestroy(); 
    } 
Смежные вопросы