1

我有一個模擬聊天的Android程序。因爲它我使用列表和項目的名單是在XML文件名爲activity_chat_conversation在這種佈局我必須線性佈局,其中每個我有EditTextImageView當我改變線性佈局的可見性,並添加到列表中所有過去的項目的可見性將被改變

代碼:

<?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:id="@+id/llmain" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:ignore="UseCompoundDrawables" > 

<LinearLayout 
    android:id="@+id/llFrom" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingTop="7dp" 
    android:visibility="gone" > 

    <ImageView 
     android:id="@+id/imgChatConversationFrom" 
     android:layout_width="32dp" 
     android:layout_height="32dp" 
     android:background="@color/gray" 
     android:contentDescription="@string/user_image" 
     android:scaleType="fitCenter" 
     android:src="@drawable/ic_user_image" /> 

    <TextView 
     android:id="@+id/txtChatConversationFrom" 
     android:layout_width="0dp" 
     android:layout_height="45dp" 
     android:layout_weight="1" 
     android:background="@drawable/from" 
     android:gravity="right|top" 
     android:layoutDirection="rtl" 
     android:paddingLeft="45dp" 
     android:paddingRight="10dp" 
     android:text="@string/user_name" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textDirection="rtl" /> 

</LinearLayout> 

<LinearLayout 
    android:id="@+id/llTo" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingTop="7dp" 
    android:visibility="gone" > 

    <TextView 
     android:id="@+id/txtChatConversationTo" 
     android:layout_width="0dp" 
     android:layout_height="45dp" 
     android:layout_weight="1" 
     android:background="@drawable/to" 
     android:gravity="right|top" 
     android:layoutDirection="rtl" 
     android:paddingRight="48dp" 
     android:paddingTop="5dp" 
     android:text="@string/user_name" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textDirection="rtl" /> 

    <ImageView 
     android:id="@+id/imgChatConversationTo" 
     android:layout_width="32dp" 
     android:layout_height="32dp" 
     android:layout_gravity="bottom" 
     android:background="@color/gray" 
     android:contentDescription="@string/user_image" 
     android:scaleType="fitCenter" 
     android:src="@drawable/ic_user_image" /> 

</LinearLayout> 

填充列表我創建一個適配器,並在其中我設置要顯示什麼樣的線性佈局。

代碼:

globalVars.barConversation = new BaseAdapter() { 
          int searchUser = globalVars.findConversationByUsername(friendId); 

          @Override 
          public View getView(int position, View convertView, ViewGroup parent) { 
           View view = convertView; 
           if(convertView == null) { 
            view = getLayoutInflater().inflate(R.layout.activity_chat_conversation, null); 
           } 
           LinearLayout llfrom = (LinearLayout)view.findViewById(R.id.llFrom); 
           LinearLayout llto = (LinearLayout)view.findViewById(R.id.llTo); 
           TextView textViewTo = (TextView)view.findViewById(R.id.txtChatConversationTo); 
           ImageView imageViewTo = (ImageView)view.findViewById(R.id.imgChatConversationTo); 
           TextView textViewFrom = (TextView)view.findViewById(R.id.txtChatConversationFrom); 
           ImageView imageViewFrom = (ImageView)view.findViewById(R.id.imgChatConversationFrom); 

           String pmUser = friendId; 

           if (searchUser > -1) { 
            if (globalVars.conversations.get(searchUser). 
              getConversation().get(position).getSender()) { 
             pmUser = CurrentUser; 
             if (globalVars.userImage != null) { 
              imageViewTo.setImageBitmap(globalVars.userImage); 
             } 
            }else { 
             try{ 
              if(globalVars.friends.get(friendInt).getImage() != null) { 
               imageViewFrom.setImageBitmap(globalVars.friends.get(friendInt).getImage()); 
              } 
             } 
             catch(Exception ex) 
             { 
              Log.e("Chat get friend picture", ex.toString()); 
             } 
            } 
            if (!globalVars.conversations.get(searchUser). 
              getConversation().get(position).getIsRead()) { 
             globalVars.conversations.get(searchUser). 
             getConversation().get(position).setIsRead(true); 
             globalVars.newConversations--; 
            } 
            if(pmUser == CurrentUser) 
            { 
             llto.setVisibility(0); 
             llfrom.setVisibility(8); 
             textViewFrom.setVisibility(8); 
             imageViewFrom.setVisibility(8); 
             textViewTo.setText(globalVars.conversations.get(searchUser). 
              getConversation().get(position).getText()); 
             textViewTo.setHeight(30); 
            } 
            else 
            { 
             llfrom.setVisibility(0); 
             llto.setVisibility(8); 
             textViewTo.setVisibility(8); 
             imageViewTo.setVisibility(8); 
             textViewFrom.setText(globalVars.conversations.get(searchUser). 
               getConversation().get(position).getText()); 
            } 
           } 
           return view; 
          } 

          @Override 
          public long getItemId(int position) { 
           return position; 
          } 

          @Override 
          public Object getItem(int position) { 
           return position; 
          } 

          @Override 
          public int getCount() { 
           if (searchUser > -1) { 
            return globalVars.conversations.get(searchUser).getConversation().size(); 
           } 
           return 0; 
          } 
         }; 

當我添加新項列出,並設置可見它以前的項目可見性將被改變。

我該如何解決這個問題?

回答

1

這是因爲convertView ==以前的getView()方法。您需要刷新您的新項目的參數。例如:

if(pmUser == CurrentUser) 
{ 
    llto.setVisibility(0); 
    textViewTo.setVisibility(0); 
    imageViewTo.setVisibility(0); //this 
    llfrom.setVisibility(8); 
    textViewFrom.setVisibility(8); 
    imageViewFrom.setVisibility(8); 
    textViewTo.setText(globalVars.conversations.get(searchUser). 
      getConversation().get(position).getText()); 
    textViewTo.setHeight(30); 
} 
else 
{ 
    llfrom.setVisibility(0); 
    textViewFrom.setVisibility(0); 
    imageViewFrom.setVisibility(0); // this 
    llto.setVisibility(8); 
    textViewTo.setVisibility(8); 
    imageViewTo.setVisibility(8); 
    textViewFrom.setText(globalVars.conversations.get(searchUser). 
      getConversation().get(position).getText()); 
} 
+0

不僅看得見的物品變得不可見,而且看不見的物品也變得可見。這取決於我的'xml'文件,如果列表中的線性佈局是可見的,則列表中的項目變得可見時,上面的項目將可見,但'去掉'不會使任何項目變爲'去'。如果在'xml'中,我將線性佈局的可見性設置爲'去',這將是相反的。 –

+0

好的,你想要顯示和隱藏在什麼情況下,以及你想在其他情況下顯示和隱藏的內容? –

+0

我有一個聊天程序,這個列表作爲對話列表播放。拖曳不同的線性佈局是一個用於顯示來自朋友和其他人的消息以顯示來自我的消息的泡泡。 –

相關問題