【问题标题】:How to Dynamically add the text into listview如何将文本动态添加到列表视图中
【发布时间】:2014-11-07 09:46:24
【问题描述】:

这个问题被问了很多次,但我没有得到我的实际解决方案,因为 ArrayList 在 HashMap 中,所以 我无法在 ListView 中添加文本。我进行了一次聊天,在那里我得到了所有聊天消息的结果,但是当我发送短信时,它排在最前面,但是当我回去再次来时,它以正确的方式出现。所以我的问题是,当我添加任何文本时,它不会最后出现或出现在文本视图中。

//Here is my class 

  public class ChatScreenActivity extends Activity{

        static ArrayList messages = new ArrayList<messageArray>();
        ListView list;
        Button sendmsg;
        EditText usertext;
        ProgressDialog mProgressDialog;
         ArrayList<HashMap<String, String>> arraylist;
         private static String sendmsgurl = "http://www.get2love.webitexperts.com/sendmessage";
         private static String msgdetailurl = "http://www.get2love.webitexperts.com/getChatDetails";
         JSONParser jsonParser = new JSONParser();
         ChatMessageListAdapter adapter;
        ActionBar actionBar;

         /*ArrayList<String> al=new ArrayList<String>();
         ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,al);
        */
         @Override
            protected void onResume() {
                // TODO Auto-generated method stub
                super.onResume();
                arraylist=new ArrayList<HashMap<String,String>>();

            new messagedetaillist().execute();

            }



        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.chatscreenctivity);
            Intent intent= getIntent();
             String sender_username=intent.getExtras().getString("User_Name");
            list = (ListView) findViewById(R.id.listview1);
            list.setCacheColorHint(Color.TRANSPARENT);
            list.setDivider(null);
            usertext=(EditText)findViewById(R.id.et_sent_msg);
            sendmsg=(Button)findViewById(R.id.bt_sent_msg);
            actionBar=getActionBar();
            actionBar.show();
            actionBar.setTitle(sender_username);
            actionBar.setSubtitle("messages");

            sendmsg.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {


                    new sendmessage().execute();

                }
            });
        }


        class sendmessage extends AsyncTask<Void, Void, Void> {

            int flag;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
          mProgressDialog = new ProgressDialog(ChatScreenActivity.this);
            mProgressDialog.setMessage("Loading...");
            mProgressDialog.setIndeterminate(false);
            mProgressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... args0) {
             arraylist = new ArrayList<HashMap<String, String>>();
                List<NameValuePair> params = new ArrayList<NameValuePair>(); 
                  HashMap<String, String> map = new HashMap<String, String>();
                   UserModel user=(UserModel)getIntent().getSerializableExtra("User");
                   String User_id=String.valueOf(user.getUser_Id()); 
                   String message=usertext.getText().toString();
                   Intent intent= getIntent();
                   String sender_id=intent.getExtras().getString("Sender_id");


                params.add(new BasicNameValuePair("SenderUserID",User_id));
                params.add(new BasicNameValuePair("ChatText",message));
                params.add(new BasicNameValuePair("ReceiverID",sender_id));

                ServiceHandler sh = new ServiceHandler();
                JSONObject json = jsonParser.makeHttpRequest(sendmsgurl,"POST", params);            
                Log.d("Create Response", json.toString());
                try
                {
                  if(json!=null)
                  {
                      if(json.has("status"))
                      {
                          String status=json.getString("status");
                          if(status.equals("Success"))
                          {
                              flag=1;
                              map.put("Chat_Text",message);
                                map.put("Receiver_User_Id", sender_id);
                                map.put("User_Id", User_id);
                                arraylist.add(map);
                          }
                      }
                      else
                      {
                          flag=0;
                      }
                  }

                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }



            return null;
          }



        protected void onPostExecute(Void args) {

              if(flag==1)
              {
                  Toast.makeText(getApplicationContext(), "Succesfully send", Toast.LENGTH_SHORT).show();
                  ChatMessageListAdapter adapter = new ChatMessageListAdapter(ChatScreenActivity.this, arraylist);
                 list.setAdapter(adapter);


                  mProgressDialog.dismiss();
              }
              else
              {
                  Toast.makeText(getApplicationContext(), "Failed registered ", Toast.LENGTH_SHORT).show();

              }
          }
       }

        class messagedetaillist extends AsyncTask<Void, Void, Void> 
        {

             @Override
                protected void onPreExecute() {
                    super.onPreExecute();
                  mProgressDialog = new ProgressDialog(ChatScreenActivity.this);
                    mProgressDialog.setMessage("Loading...");
                    mProgressDialog.setIndeterminate(false);
                    mProgressDialog.show();
                }
            @Override
            protected Void doInBackground(Void... args0)
            {

                arraylist = new ArrayList<HashMap<String, String>>();
                List<NameValuePair> params = new ArrayList<NameValuePair>(); 

                   UserModel user=(UserModel)getIntent().getSerializableExtra("User");
                   String User_id=String.valueOf(user.getUser_Id());
                   Intent intent= getIntent();
                   String sender_id=intent.getExtras().getString("Sender_id");

                params.add(new BasicNameValuePair("SenderUserID",sender_id));
                params.add(new BasicNameValuePair("ReceiverID",User_id));
                ServiceHandler sh = new ServiceHandler();
                String jsonStr = sh.makeServiceCall(msgdetailurl, ServiceHandler.POST, params);

                Log.d("Response: ", "> " + jsonStr);
                if (jsonStr.length()>0) {

                try {
                    // Locate the array name in JSON
                    JSONArray contacts = new JSONArray(jsonStr);
                    for (int i = 0; i < contacts.length(); i++) {

                       HashMap<String, String> map = new HashMap<String, String>();
                        JSONObject c = contacts.getJSONObject(i);
                       String messages=c.getString("Chat_Text");
                        String SenderId=c.getString("Receiver_User_Id");
                        map.put("Chat_Text",messages);
                        map.put("Receiver_User_Id", SenderId);
                        map.put("User_Id", User_id);
                      //  map.put("TempUser_Image", USer_Image);
                        // Set the JSON Objects into the array
                        arraylist.add(map);


                    }

                }
                 catch (JSONException e) {
                    Log.e("Error", e.getMessage());
                    e.printStackTrace();
                }
                }else {
                    Log.e("ServiceHandler", "Couldn't get any data from the url");

                }

                return null;
            }
             @Override
                protected void onPostExecute(Void args) {
                 adapter = new ChatMessageListAdapter(ChatScreenActivity.this, arraylist);
                 list.setAdapter(adapter);

                  mProgressDialog.dismiss();

                }
        }

    }

这是我的适配器类

public class ChatMessageListAdapter extends BaseAdapter {

    private Activity activity;

    private static LayoutInflater inflater = null;
     ArrayList<HashMap<String, String>> data;

        HashMap<String, String> resultp = new HashMap<String, String>();
        ChatMessageListAdapter adapter;

    public ChatMessageListAdapter(Activity a, ArrayList<HashMap<String, String>> arraylist) {
        activity = a;
        data = arraylist;
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public int getCount() {
        return data.size();
    }

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

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

    public static class ViewHolder {
        // items for main crowd list
        public TextView txt_message;
        public RelativeLayout layout_align;
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        View view = convertView;
        final ViewHolder holder;
        try {
            if (convertView == null) {
                holder = new ViewHolder();
                view = inflater.inflate(R.layout.message_chat_row, null);

                holder.txt_message = (TextView) view.findViewById(R.id.txt_message);
                holder.layout_align = (RelativeLayout) view.findViewById(R.id.layout_align);

                view.setTag(holder);
            } else
                holder = (ViewHolder) view.getTag();


            resultp=data.get(position);

            String type = resultp.get("Receiver_User_Id");
            String message =resultp.get("Chat_Text");
            String User_id=resultp.get("User_Id");// data.get(position).message;

            if (!type.equalsIgnoreCase(User_id)) {
                holder.layout_align.setGravity(Gravity.RIGHT);
                holder.txt_message.setText(message);
                holder.txt_message.setBackgroundResource(R.drawable.bubble_green);


            }
            else  {
                holder.layout_align.setGravity(Gravity.LEFT);
                holder.txt_message.setText(message);
                holder.txt_message.setBackgroundResource(R.drawable.bubble_yellow);
            }

        } catch (Exception e) {
            // TODO: handle exception
        }
        return view;
    }

}

【问题讨论】:

  • 我的问题是在我的数组列表中添加“usertext”的位置。我已经尝试在messagesend按钮中添加点击,bt失败。
  • 在 0 位置添加 HashMap,例如:arraylist.add(0,map);
  • 你想说,先在hash中添加文本,然后再添加到arraylist中。
  • 我正在尝试 arraylist.add(0,map) ,bt 在 add 中给出错误,尝试 addall ,bt 它也给出了错误。这是我的问题,我无法添加。跨度>

标签: android


【解决方案1】:

在 getView 中试试这个

           SearchViewHolder orderViewHolder = null;
    if (convertView == null) {
        orderViewHolder = new SearchViewHolder();   



            convertView = inflater.inflate(R.layout.order_list_row, null);
            orderViewHolder.setproe((TextView) convertView
                    .findViewById(R.id.tet1));
            orderViewHolder.setbaumber((TextView) convertView    
                    .findViewById(R.id.tet2));



        convertView.setTag(orderViewHolder);    
        //orderViewHolder.getproductname().setTextSize(12);
    } else {
        orderViewHolder = (SearchViewHolder)convertView.getTag();
    }



        orderViewHolder.getproductname().setText(""+partProductQTY.ownerPartyId);
        orderViewHolder.getbatchnumber().setText(""+partProductQTY.availableToPromiseTotal);

    return convertView;

这里 partProductQTY 是我的普通 POJO 类,除此之外你需要使用 ArrayList

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多