首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义列表视图值波动时,新的价值增加?

自定义列表视图值波动时,新的价值增加?
EN

Stack Overflow用户
提问于 2017-05-26 10:30:59
回答 1查看 46关注 0票数 0

我正在尝试做聊天应用程序。当发送一个应该在右边的消息时,接收到的消息应该在左边。我什么事都做得很好。当我在列表视图中添加新值时,先前的值会发生波动。有谁能解决我的问题吗?我已经附上了我的源代码。

主要活动:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {
ArrayList<ChatData> data = new ArrayList<ChatData>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final ListView listView = (ListView) findViewById(R.id.list_item);

    final ChatAdaptor chatAdaptor = new ChatAdaptor(this, getDetails());
    listView.setAdapter(chatAdaptor);
    listView.setDivider(null);

    ImageView imageView = (ImageView) findViewById(R.id.submit);
    imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            EditText objText = (EditText) findViewById(R.id.text_msg);

          chatAdaptor.add(new ChatData(objText.getText().toString(), false));
            listView.setSelection(chatAdaptor.getCount() - 1);
            objText.setText(null);
          //  chatAdaptor.notifyDataSetChanged();
        }
    });
}

public ArrayList<ChatData> getDetails() {
    data.add(new ChatData("Hi! Agent", false));
    data.add(new ChatData("Hi! Agent ,Are you there ", false));
    data.add(new ChatData("Yeah tell me how can I help you", true));
    data.add(new ChatData("I am getting wrong balance", false));
    return data;

}

}

自定义适配器:

代码语言:javascript
复制
public class ChatAdaptor extends ArrayAdapter<ChatData> {
private Activity activity;

String TAG = "bks";

private List<ChatData> originalData = null;


public ChatAdaptor(Activity activity, ArrayList<ChatData> objects) {
    super(activity, 0, objects);
    this.activity = activity;
    this.originalData = objects;

}

@Override
//called when rendering the list
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder holder;

    if (convertView == null) {
        // convertView = mInflater.inflate(R.layout.search_data, true,null);
        LayoutInflater inflater = activity.getLayoutInflater();
        convertView = inflater.inflate(R.layout.test, null, false);


        if (originalData.get(position).isAgentMsg())
            convertView = inflater.inflate(R.layout.show_chat_agent, null, true);
        else
            convertView = inflater.inflate(R.layout.show_chat_client, null, true);


        // Creates a ViewHolder and store references to the three views
        // we want to bind data to.

        holder = new ViewHolder();
        holder.objMsg = ( TextView ) convertView.findViewById(R.id.msg) ;


        // Bind the data efficiently with the holder.

        convertView.setTag(holder);
    } else {
        // Get the ViewHolder back to get fast access to the TextView
        holder = (ViewHolder) convertView.getTag();
    }
    holder.objMsg.setText(originalData.get(position).getMsg());


    return convertView;
}


static class ViewHolder {
    TextView objMsg;
    /**  TextView objClientText, objAgentText;
     ImageView objClientImage1, objClientImage2;
     ImageView objAgentImage1, objAgentImage2;
     */
}

}

谢谢

Kalanidhi M

EN

回答 1

Stack Overflow用户

发布于 2017-05-26 13:01:08

只需在getView方法中更改这一行

代码语言:javascript
复制
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.test, parent, true);


if (originalData.get(position).isAgentMsg())
            convertView = inflater.inflate(R.layout.show_chat_agent, parent, true);
        else
            convertView = inflater.inflate(R.layout.show_chat_client, parent, true);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44199295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档