Android 使用RecyclerView将意图从活动发送到另一个活动
我有一个活动,我输入一个电话号码和一条消息,当我点击发送按钮时,我想在另一个活动的布局中显示我输入的消息和号码,该活动有一个RecyclerView。我尝试使用Intent,但它在两个文本视图中都显示“NUMBER”和“NUMBER”。 这是下面的一些代码Android 使用RecyclerView将意图从活动发送到另一个活动,android,android-intent,android-recyclerview,Android,Android Intent,Android Recyclerview,我有一个活动,我输入一个电话号码和一条消息,当我点击发送按钮时,我想在另一个活动的布局中显示我输入的消息和号码,该活动有一个RecyclerView。我尝试使用Intent,但它在两个文本视图中都显示“NUMBER”和“NUMBER”。 这是下面的一些代码 public class NewMessageActivity extends AppCompatActivity { private String message, number; private EditText mComposeMe
public class NewMessageActivity extends AppCompatActivity {
private String message, number;
private EditText mComposeMessage, mPhoneNumber;
private Button mSendButton, mCancelButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.new_message_layout);
mPhoneNumber = (EditText) findViewById(R.id.phone_number_et);
mComposeMessage = (EditText) findViewById(R.id.compose_et);
mSendButton = (Button) findViewById(R.id.send_button);
mCancelButton = (Button) findViewById(R.id.cancel_button);
number = mPhoneNumber.getText().toString();
message = mComposeMessage.getText().toString();
mSendButton.setOnClickListener(mButtonClickListener);
mCancelButton.setOnClickListener(mButtonClickListener);
}
private View.OnClickListener mButtonClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.send_button:
Intent intent = new Intent(v.getContext(), SentActivity.class);
intent.putExtra(getString(R.string.key_message), message);
intent.putExtra("NUMBER", number);
startActivity(intent);
break;
case R.id.cancel_button:
break;
}
}
};
}
这是我的适配器
public class SentMessageAdapter extends RecyclerView.Adapter<SentMessageAdapter.MessageHolder> {
private List<String> mMessages;
public static class MessageHolder extends RecyclerView.ViewHolder {
private TextView mSentMessageTv;
private TextView mRecipientNumberTv;
private TextView mRecipientTv;
public MessageHolder(View v){
super(v);
mSentMessageTv = (TextView) v.findViewById(R.id.sent_message_tv);
mRecipientNumberTv = (TextView) v.findViewById(R.id.recipient_number_tv);
mRecipientTv = (TextView) v.findViewById(R.id.recipient_tv);
}
}
public SentMessageAdapter(List<String> messages){
mMessages = messages;
}
@Override
public MessageHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.sent_list_item, parent, false);
MessageHolder vH = new MessageHolder(v);
return vH;
}
@Override
public void onBindViewHolder(MessageHolder holder, int position) {
holder.mSentMessageTv.setText(mMessages.get(position));
holder.mRecipientNumberTv.setText(mMessages.get(position));
holder.mRecipientTv.setText(R.string.to);
}
@Override
public int getItemCount() {
return mMessages.size();
}
}
公共类SentMessageAdapter扩展了RecyclerView.Adapter{
私人名单信息;
公共静态类MessageHolder扩展了RecyclerView.ViewHolder{
私有文本视图mSentMessageTv;
私有文本视图mRecipientNumberTv;
私人文本视图mrecipientv;
公共消息持有者(视图五){
超级(五);
mSentMessageTv=(TextView)v.findviewbyd(R.id.sent\u message\u tv);
mRecipientNumberTv=(TextView)v.findviewbyd(R.id.recipient\u number\u tv);
mrecipientv=(TextView)v.findviewbyd(R.id.recipient\u tv);
}
}
公共SentMessageAdapter(列出消息){
M消息=消息;
}
@凌驾
public MessageHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.sent\u list\u项,parent,false);
消息持有者vH=新消息持有者(v);
返回vH;
}
@凌驾
public void onBindViewHolder(MessageHolder,int位置){
holder.mSentMessageTv.setText(mMessages.get(position));
holder.mRecipientNumberTv.setText(mMessages.get(position));
holder.mRecipientTv.setText(R.string.to);
}
@凌驾
public int getItemCount(){
返回mMessages.size();
}
}
应显示文本的活动
public class SentActivity extends AppCompatActivity {
private static final String LOG_TAG = SentActivity.class.getSimpleName();
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
final ArrayList<String> messages = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.message_recycler_list);
Bundle extras = getIntent().getExtras();
String message = null;
if (extras != null){
message = extras.getString(String.valueOf(R.string.key_message), String.valueOf("NUMBER"));
}
if (message == null){
message = "text";
}
Log.d(LOG_TAG, message);
messages.add(0, message);
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
mRecyclerView = (RecyclerView) findViewById(R.id.message_recycler_view);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new SentMessageAdapter(messages);
mRecyclerView.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
}
}
公共类SentActivity扩展了AppCompatActivity{
私有静态最终字符串LOG_TAG=SentActivity.class.getSimpleName();
私人回收视图mRecyclerView;
专用回收器查看适配器mAdapter;
private RecyclerView.LayoutManager MLLayoutManager;
最终ArrayList消息=新建ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.message\u recycler\u列表);
Bundle extras=getIntent().getExtras();
字符串消息=null;
如果(附加值!=null){
message=extras.getString(String.valueOf(R.String.key_message),String.valueOf(“NUMBER”);
}
如果(消息==null){
message=“text”;
}
Log.d(日志标签、消息);
消息。添加(0,消息);
Toast.makeText(this,message,Toast.LENGTH_SHORT).show();
mRecyclerView=(RecyclerView)findViewById(R.id.message\u recycler\u视图);
mLayoutManager=新的LinearLayoutManager(此);
mRecyclerView.setLayoutManager(mllayoutmanager);
mAdapter=新SentMessageAdapter(消息);
mRecyclerView.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
}
}
活动的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<TextView
android:id="@+id/sent_message_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
tools:text="Hello world"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:orientation="horizontal">
<TextView
android:id="@+id/recipient_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="@string/to"/>
<TextView
android:id="@+id/recipient_number_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="4dp"
android:paddingStart="4dp"
android:paddingRight="4dp"
android:paddingEnd="4dp" />
</LinearLayout>
</LinearLayout>
您正在访问onCreate中的电话号码编辑文本
number = mPhoneNumber.getText().toString();
它将被设置为XML中的任何文本(我猜是设置为数字)。在用户输入文本后,您需要访问它,所以请在单击listener时插入这一行。在onClick方法中获取消息和数字值而不是onCreate
switch (id) {
case R.id.send_button:
number = mPhoneNumber.getText().toString();
message = mComposeMessage.getText().toString();
Intent intent = new Intent(v.getContext(), SentActivity.class);
intent.putExtra(getString(R.string.key_message), message);
intent.putExtra("NUMBER", number);
startActivity(intent);
break;
}
希望这会对您有所帮助。您没有得到您输入的值是因为您正在onCreate方法中访问edittext值,该方法具有默认值,因此您应该使用
number = mPhoneNumber.getText().toString();
message = mComposeMessage.getText().toString();
这在onClick方法中实现
private View.OnClickListener mButtonClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.send_button:
number = mPhoneNumber.getText().toString();
message = mComposeMessage.getText().toString();
Intent intent = new Intent(v.getContext(), SentActivity.class);
intent.putExtra(getString(R.string.key_message), message);
intent.putExtra("NUMBER", number);
startActivity(intent);
break;
case R.id.cancel_button:
break;
}
}
};
我的错误。我现在已经修好了。我创建了一个POJO类
public class Message {
private String mMessage;
private String mNumber;
public Message(String number, String message){
mNumber = number;
mMessage = message;
}
public String getMessage() {
return mMessage;
}
public String getNumber() {
return mNumber;
}
}
然后我将onBindViewHolder()更改为
我也换了
String message = null;
String number = null;
if (extras != null){
message = extras.getString(String.valueOf("MESSAGE"));
number = extras.getString(String.valueOf("NUMBER"));
}
messages.add(new Message(number, message));
最后,我将所有泛型都改为
<Message>
在
onBindViewHolder
中为mSentMessageTv
和mRecipientNumberTv
<Message>