在recycleView中为不同的项加载不同的聊天模型

时间:2017-03-18 20:56:57

标签: java android google-cloud-messaging stickyrecycleview

我将此聊天模型附加到"在项目上点击chat model

的活动

当我点击某个cardView时,它会为所有卡片视图打开相同的聊天模型 如何制作不同的聊天数据"消息"到recycleView中的每个视图?

回收视图中每个点击监听器的活动

 if(FirebaseAuth.getInstance().getCurrentUser() == null) {
        // Start sign in/sign up activity
        startActivityForResult(
                AuthUI.getInstance()
                        .createSignInIntentBuilder()
                        .build(),
                SIGN_IN_REQUEST_CODE
        );
    } else {
        // User is already signed in. Therefore, display
        // a welcome Toast
        Toast.makeText(this,
                "Welcome " + FirebaseAuth.getInstance()
                        .getCurrentUser()
                        .getDisplayName(),
                Toast.LENGTH_LONG)
                .show();

        // Load chat room contents
        displayChatMessages();
    }


    FloatingActionButton fab =
            (FloatingActionButton)findViewById(R.id.fab);

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            EditText input = (EditText)findViewById(R.id.input);

            // Read the input field and push a new instance
            // of ChatMessage to the Firebase database
            FirebaseDatabase.getInstance()
                    .getReference()
                    .push()
                    .setValue(new ChatMessage1(input.getText().toString(),
                            FirebaseAuth.getInstance()
                                    .getCurrentUser()
                                    .getDisplayName())
                    );

            // Clear the input
            input.setText("");
        }
    });
    displayChatMessages();}



private void displayChatMessages() {
    ListView listOfMessages = (ListView)findViewById(R.id.list_of_messages);

    adapter = new FirebaseListAdapter<ChatMessage1>(this, ChatMessage1.class,
            R.layout.messagee, FirebaseDatabase.getInstance().getReference()) {
        @Override
        protected void populateView(View v, ChatMessage1 model, int position) {
            // Get references to the views of message.xml
            TextView messageText = (TextView)v.findViewById(R.id.message_text);
            TextView messageUser = (TextView)v.findViewById(R.id.message_user);
            TextView messageTime = (TextView)v.findViewById(R.id.message_time);

            // Set their text
            messageText.setText(model.getMessageText());
            messageUser.setText(model.getMessageUser());

            // Format the date before showing it
            messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)",
                    model.getMessageTime()));
        }
    };

    listOfMessages.setAdapter(adapter);
}

OnClick方法

 @Override
    public void onClick(View v) {
        int position=getAdapterPosition();
        PushBotsModel push =  pushBotsModels.get(position);
        Log.i(TAG, "User received notification with Message: " + push);
        Intent intent = new Intent(this.ctx, NotificationDetails.class);
        intent.putExtra("itemName",push.getMessage());
        intent.putExtra("authorr",push.getauthor());
        this.ctx.startActivity(intent);
    }
}

聊天模式

public class ChatMessage1 {

private String messageText;
private String messageUser;
private long messageTime;

public ChatMessage1(String messageText, String messageUser) {
    this.messageText = messageText;
    this.messageUser = messageUser;

    // Initialize to current time
    messageTime = new Date().getTime();
}

public ChatMessage1(){

}

public String getMessageText() {
    return messageText;
}

public void setMessageText(String messageText) {
    this.messageText = messageText;
}

public String getMessageUser() {
    return messageUser;
}

public void setMessageUser(String messageUser) {
    this.messageUser = messageUser;
}

public long getMessageTime() {
    return messageTime;
}

public void setMessageTime(long messageTime) {
    this.messageTime = messageTime;
}

}

1 个答案:

答案 0 :(得分:0)

如果要使用RecyclerView中讨论的Creating Lists and Cards窗口小部件,可能需要指定适配器和布局管理器。

此外,如本例所示,

public class MyActivity extends Activity {
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);
        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

        // use this setting to improve performance if you know that changes
        // in content do not change the layout size of the RecyclerView
        mRecyclerView.setHasFixedSize(true);

        // use a linear layout manager
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        // specify an adapter (see also next example)
        mAdapter = new MyAdapter(myDataset);
        mRecyclerView.setAdapter(mAdapter);
    }
    ...
} 
首先将

RecyclerView小部件添加到布局中,获取对象的句柄,将其连接到布局管理器,并附加适配器以显示数据。有关详细信息,请查看documentation

而且,您可能还想查看以下参考资料以获取更多见解:

相关问题