2017-07-04 9 views
0

アクティビティがあり、電話番号とメッセージを入力します。送信ボタンをクリックすると、別のアクティビティのレイアウトに入力したメッセージと番号を表示しますRecyclerViewがあります。私はインテントを使用しようとしましたが、両方のTextViewに「NUMBER」と「NUMBER」と表示されます。 これは以下のコードの一部です。RecyclerViewでアクティビティから別のアクティビティにインテントを送信

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

} 

これは、テキストはあなたが電話番号の編集にアクセスしている活動

<?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> 
+0

'mSentMessageTv'と 'mRecipientNumberTv' – Bills

答えて

0

ため

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

} 

レイアウトを表示しなければならない私のアダプタ

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

} 

活動でありますonCreateのテキスト。

number = mPhoneNumber.getText().toString(); 

そして、それはXMLでどんなテキスト(それは私が推測NUMBERに設定しています)に設定されます。ユーザーがテキストを入力した後でこれにアクセスする必要があるので、この行をクリックリスナーに入れます。

0

の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の値にアクセスしているので、あなたが入力し
0

あなたが取得されていません値があるのonClickメソッドで

number = mPhoneNumber.getText().toString(); 
    message = mComposeMessage.getText().toString(); 

この

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

マイ間違い。私は今それを修正しました。私は

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

} 

そして、POJOクラスを作成し、私はまた、最後に

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

に変更

@Override 
public void onBindViewHolder(MessageHolder holder, int position) { 
    holder.mSentMessageTv.setText(mMessages.get(position).getMessage()); 
    holder.mRecipientNumberTv.setText(mMessages.get(position).getNumber()); 
    holder.mRecipientTv.setText(R.string.to); 
} 

にonBindViewHolderを()に変更、私は

<Message> 
に、すべてのジェネリックを変更しました`onBindViewHolder`に同じテキストを設定すると
関連する問題