Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用RecyclerView将意图从活动发送到另一个活动_Android_Android Intent_Android Recyclerview - Fatal编程技术网

Android 使用RecyclerView将意图从活动发送到另一个活动

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

我有一个活动,我输入一个电话号码和一条消息,当我点击发送按钮时,我想在另一个活动的布局中显示我输入的消息和号码,该活动有一个RecyclerView。我尝试使用Intent,但它在两个文本视图中都显示“NUMBER”和“NUMBER”。 这是下面的一些代码

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>