2017-03-16 20 views
0

私は、recyclerviewとedittextの下にあるedittextと、edittextの右側のimagebuttonのチャットを読み込もうとするチャットアプリを作成しようとしています。RecyclerViewが正しく読み込まれていません

私はリサイクルビューともう1つの相対レイアウトを持っています。この2番目のrelativelayout内に、私はedittextとimagebuttonを持っています。しかし、recyclerviewは正しく読み込まれていません。

enter image description here

私はrecyclerviewは、間に空白なしのEditTextの開始までロードしたいです。

layout.xmlファイル

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_im" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="com.abdralabs.talksee.IMActivity" 
    android:weightSum="10"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/rv_im" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:scrollbars="vertical" 
     android:layout_weight="8.5"/> 

    <RelativeLayout 
     android:id="@+id/rl_im" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="12dp" 
     android:orientation="vertical" 
     android:layout_weight="1.5"> 

     <EditText 
      android:id="@+id/et_im" 
      android:layout_width="290dp" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:hint="Enter message..." 
      android:inputType="textPersonName" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" /> 

     <ImageButton 
      android:id="@+id/ib_im" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      app:srcCompat="@android:drawable/ic_menu_send" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" /> 

    </RelativeLayout> 


</RelativeLayout> 

activity.javaファイル

public class IMActivity extends AppCompatActivity { 

    private RecyclerView recyclerView; 
    private ImAdapter imAdapter; 
    private List<ChatMsg> chatMsgList = new ArrayList<>(); 
    EditText etIp; 
    Button setIp; 
    Button setOn; 
    EditText messageInput; 
    Button sendButton; 
    ServiceConnection serviceConnection; 
    TalkSeeService.TalkSeeBinder talkSeeBinder; 
    String otherUserName; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     bindService(new Intent(IMActivity.this, TalkSeeService.class), new ServiceConnection() { 
      @Override 
      public void onServiceConnected(ComponentName name, IBinder service) { 
       talkSeeBinder = (TalkSeeService.TalkSeeBinder)service; 
      } 

      @Override 
      public void onServiceDisconnected(ComponentName name) { 
       talkSeeBinder = null; 
      } 
     },BIND_AUTO_CREATE); 
     setContentView(R.layout.activity_im); 

     Intent intent = getIntent(); 
     otherUserName = intent.getStringExtra("otherUserName"); 
     recyclerView = (RecyclerView)findViewById(R.id.rv_im); 
     imAdapter = new ImAdapter(chatMsgList); 
     RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext()); 
     recyclerView.setLayoutManager(layoutManager); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL)); 
     recyclerView.setAdapter(imAdapter); 

     prepareChatData(); 
    } 


    private void prepareChatData() { 
     ChatMsg chatMsg = new ChatMsg(otherUserName); 
     chatMsgList.add(chatMsg); 

     imAdapter.notifyDataSetChanged(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_swipe, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     switch(item.getItemId()) 
     { 
      case R.id.action_settings: 
       break; 
      case R.id.log_out: 
       Intent i2 = new Intent(this,LauncherActivity.class); 
       i2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
       LoggedInSharedPreference.clearUserName(getApplicationContext()); 
       startActivity(i2); 
       break; 
      case R.id.recent_conversations: 
       Intent rcIntent = new Intent(this,HistoryActivity.class); 
       startActivity(rcIntent); 
       break; 
      default: 
       Toast.makeText(this,"Somthing went wrong. Please try again!",Toast.LENGTH_SHORT).show(); 
       break; 
     } 

     return true; 
    } 

} 

私を助けてください。ありがとう。

+0

アダプタのコードが欠落しています。 –

答えて

0

編集このようなあなたのXMLファイル:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_im" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="com.abdralabs.talksee.IMActivity" 
    android:weightSum="10"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/rv_im" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:scrollbars="vertical" 
     android:layout_weight="8.5"/> 

    <RelativeLayout 
     android:id="@+id/rl_im" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="12dp" 
     android:orientation="vertical" 
     android:layout_weight="1.5"> 

     <EditText 
      android:id="@+id/et_im" 
      android:layout_width="290dp" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:hint="Enter message..." 
      android:inputType="textPersonName" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" /> 

     <ImageButton 
      android:id="@+id/ib_im" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      app:srcCompat="@android:drawable/ic_menu_send" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" /> 

    </RelativeLayout> 


</RelativeLayout> 
0

私は問題では、ローカル変数であるchatMsgList、のデータを変更していると思います。 notifyDataSetChanged()を呼び出すと、動作しません。

)、それを動作させる任意の名前で新しい関数を作成し、prepareChatData(でそれを呼び出すために

このよう
private void prepareChatData() { 
    ChatMsg chatMsg = new ChatMsg(otherUserName); 
    chatMsgList.add(chatMsg); 
    imAdapter.swapData(chatMsgList); 
} 

あなたのアダプタインサイドあなたが使用する必要があります

public void swapData(Cursor chatMsgList) { 
    myChatlistArray = chatMsgList; 
    notifyDataSetChanged(); 
    } 
0

このメソッドを実装LinearLayoutlayout_weight属性を使用する場合:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_im" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="com.abdralabs.talksee.IMActivity" 
    android:weightSum="10"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/rv_im" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:scrollbars="vertical" 
     android:layout_weight="8.5"/> 

    <RelativeLayout 
     android:id="@+id/rl_im" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="12dp" 
     android:orientation="vertical" 
     android:layout_weight="1.5"> 

     <EditText 
      android:id="@+id/et_im" 
      android:layout_width="290dp" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:hint="Enter message..." 
      android:inputType="textPersonName" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" /> 

     <ImageButton 
      android:id="@+id/ib_im" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      app:srcCompat="@android:drawable/ic_menu_send" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" /> 

    </RelativeLayout> 

</LinearLayout> 
0

はこれを試してみてください:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="com.abdralabs.talksee.IMActivity" 
    android:id="@+id/activity_im" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/rv_im" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@+id/rl_im"/> 

    <RelativeLayout 
     android:id="@+id/rl_im" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_marginBottom="12dp"> 

     <EditText 
      android:id="@+id/et_im" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:ems="10" 
      android:hint="Enter message..." 
      android:inputType="textPersonName" 
      android:layout_toLeftOf="@+id/ib_im" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" /> 

     <ImageButton 
      android:id="@+id/ib_im" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      app:srcCompat="@android:drawable/ic_menu_send" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" /> 

    </RelativeLayout> 


</RelativeLayout> 
関連する問題