【问题标题】:load different chat model for different item in recycleView为 recyclerView 中的不同项目加载不同的聊天模式
【发布时间】:2017-03-20 00:33:42
【问题描述】:

我将此聊天模型附加到“On Item click chat model”活动中

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

循环视图中每个点击监听的Activity

 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;
}

}

【问题讨论】:

    标签: java android google-cloud-messaging stickyrecycleview


    【解决方案1】:

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

    另外,如本例所示,

    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 了解更多信息。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      相关资源
      最近更新 更多