热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在Android中自定义ListView?-HowtocustomizetheListViewinAndroid?

Iamworkingonachatapplicationandstuckatthispositionwherewhenausertypeshismessageit

I am working on a chat application and stuck at this position where when a user types his message it is displayed in the listview row , but i want to show it in a chat bubble , i am also posting here my complete code,

我正在开发一个聊天应用程序并停留在这个位置,当用户输入他的消息时,它显示在listview行中,但我想在聊天气泡中显示它,我也在这里发布我的完整代码,

enter image description here

i want to make something like this,

我想做这样的事,

but right now i can only post simple List elements with text written on them with send button press.

但是现在我只能发送简单的List元素,文字写在上面,按下发送按钮。

How can i achieve the desired result ? I have done a lot of research but none of the post was satisfactory.

我怎样才能达到预期的效果?我做了很多研究,但没有一篇文章令人满意。

Here is my

这是我的

chat.xml





    

Now here is the

现在这里是

chatactivity.java

import java.io.BufferedReader;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;



import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
//import android.view.Menu;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.KeyEvent;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class ChatScreenActivity extends Activity implements OnClickListener  {

    Button chatButton;
    EditText medit;
    ListView mView;
     private ArrayList itemArrey;
        private ArrayAdapter itemAdapter;



      private InputStream OpenHttpConnection(String urlString) throws IOException
        {
        InputStream in = null;
        int respOnse= -1;
        URL url = new URL(urlString);
        URLConnection cOnn= url.openConnection();
        if (!(conn instanceof HttpURLConnection))
        throw new IOException("Not an HTTP connection");
        try{
        HttpURLConnection httpCOnn= (HttpURLConnection) conn;
        httpConn.setAllowUserInteraction(false);
        httpConn.setInstanceFollowRedirects(true);
        httpConn.setRequestMethod("GET");
        httpConn.connect();
        respOnse= httpConn.getResponseCode();
        if (respOnse== HttpURLConnection.HTTP_OK) {
        in = httpConn.getInputStream();
        }
        }
        catch (Exception ex)
        {
        Log.d("Networking", ex.getLocalizedMessage());
        throw new IOException("Error connecting");
        }
        return in;
        }

        private Bitmap DownloadImage(String URL)
        {
        Bitmap bitmap = null;
        InputStream in = null;
        try {
        in = OpenHttpConnection(URL);
        bitmap = BitmapFactory.decodeStream(in);
        in.close();
        } catch (IOException e1) {
        Log.d("NetworkingActivity", e1.getLocalizedMessage());
        }
        return bitmap;
        }
        private class DownloadImageTask extends AsyncTask {
        protected Bitmap doInBackground(String... urls) {
        return DownloadImage(urls[0]);
        }
        protected void onPostExecute(Bitmap result) {
        ImageView img = (ImageView) findViewById(R.id.img);
        img.setImageBitmap(result);
        }
        }

  //  static TextView txtMessagesReceived;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Remove title bar
                //this.requestWindowFeature(Window.FEATURE_NO_TITLE);

                //Remove notification bar
                //this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.activity_chat_screen);



//      LinearLayout lView = new LinearLayout(this);

        /*TextView myText = new TextView(this);
        myText.setText("Connecting to server...");

        lView.addView(myText);

        setContentView(lView); */
         //LinearLayout lView = new LinearLayout(this);

        chatButton=(Button)findViewById(R.id.buttonchat3);
        chatButton.setOnClickListener(this);


    }

    private void setUpView() {
        // TODO Auto-generated method stub
        medit = (EditText)this.findViewById(R.id.txtMessage);
        chatButton = (Button)this.findViewById(R.id.buttonchat3);
        mView = (ListView)this.findViewById(R.id.txtMessagesReceived);


        itemArrey = new ArrayList();
        itemArrey.clear();

        itemAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1,itemArrey);
        mView.setAdapter(itemAdapter);


        chatButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                addItemList();
            }
        });

        medit.setOnKeyListener(new View.OnKeyListener() {

            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // TODO Auto-generated method stub

                if (keyCode == KeyEvent.KEYCODE_ENTER) {
                    addItemList();
                }
                return true;
            }
        });


    }


     protected void addItemList() {
            // TODO Auto-generated method stub

            // TODO Auto-generated method stub
        if (isInputValid(medit)) {
            itemArrey.add(0,medit.getText().toString());
            medit.setText("");

            itemAdapter.notifyDataSetChanged();

        }   

        }


      protected boolean isInputValid(EditText etInput2) {
            // TODO Auto-generatd method stub
            if (etInput2.getText().toString().trim().length()<1) {
                etInput2.setError("Please Enter Message");
                return false;
            } else {
                return true;
            }

        }


      private void chatbutton()
        {

          medit=(EditText)findViewById(R.id.txtMessage);

           String Str=medit.getText().toString();
           if(Str.equals("") || Str.equals(null) )
           {

               Toast.makeText(this,"Please Type Something...",Toast.LENGTH_LONG).show();
           }
           else
           {
           mView=(ListView)findViewById(R.id.txtMessagesReceived);
          // mView.append("Me: "+Sr+"\n");
           //Toast.makeText(this,"Me:"+Str,Toast.LENGTH_LONG).show();
           setUpView();

          // medit.setText("");
           }
           // connectServer();


        }


    public void onClick(View v2)
    {
        switch (v2.getId())
        {
        case R.id.buttonchat3:
        chatbutton();
        break;
        }
    }



    private void connectServer()
    {
        HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet("http://members.webtitude.in/project/Android/android.php");
        try {
            HttpResponse respOnse= httpclient.execute(httpget);
            if(response != null) {
                String line = "";
                InputStream inputstream = response.getEntity().getContent();
                line = convertStreamToString(inputstream);
                Toast.makeText(this, line, Toast.LENGTH_LONG).show();

            } else {
                Toast.makeText(this, "Unable to complete your request", Toast.LENGTH_LONG).show();
            }
        } catch (ClientProtocolException e) {
            Toast.makeText(this, "Caught ClientProtocolException", Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            Toast.makeText(this, "Internet Seems to not work properly", Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            Toast.makeText(this, "Did not get the url !", Toast.LENGTH_SHORT).show();
        }

    }

    private String convertStreamToString(InputStream is) {
        String line = "";
        StringBuilder total = new StringBuilder();
        BufferedReader rd = new BufferedReader(new InputStreamReader(is));
        try {
            while ((line = rd.readLine()) != null) {
                total.append(line);
            }
        } catch (Exception e) {
            Toast.makeText(this, "Stream Exception", Toast.LENGTH_SHORT).show();
        }
        return total.toString();
    }



}

Any kind of help is appreciable !

任何形式的帮助都是可观的!

I just need a Guidance , just show me the right path , i will travel the whole way by myself.

我只需要一个指导,只要告诉我正确的道路,我将自己一路旅行。

1 个解决方案

#1


0  

Make your own class extending BaseAdapter and define the behavior that you want. Also create your own list item layouts. I recommend you watch The World of ListView to undertsand everything you need to know about ListView

使您自己的类扩展BaseAdapter并定义所需的行为。还可以创建自己的列表项布局。我建议您观看ListView的World of underts以及您需要了解的有关ListView的所有信息


推荐阅读
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
  • 一、Advice执行顺序二、Advice在同一个Aspect中三、Advice在不同的Aspect中一、Advice执行顺序如果多个Advice和同一个JointPoint连接& ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • HTML前端开发:UINavigationController与页面间数据传递详解
    本文详细介绍了如何在HTML前端开发中利用UINavigationController进行页面管理和数据传递,适合初学者和有一定基础的开发者学习。 ... [详细]
  • 本文通过具体示例探讨了如何在iOS应用中有效使用scrollView,并解决了常见的无法滚动问题。不仅介绍了基础的使用方法,还详细讲解了代码实现的具体步骤。 ... [详细]
  • 如何高效解决Android应用ANR问题?
    本文介绍了ANR(应用程序无响应)的基本概念、常见原因及其解决方案,并提供了实用的工具和技巧帮助开发者快速定位和解决ANR问题,提高应用的用户体验。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 深入探讨前端代码优化策略
    本文深入讨论了前端开发中代码优化的关键技术,包括JavaScript、HTML和CSS的优化方法,旨在提升网页加载速度和用户体验。 ... [详细]
  • 近期尝试从www.hub.sciverse.com网站通过编程手段获取数据时遇到问题,起初尝试使用WebBrowser控件进行数据抓取,但发现使用GET方法翻页时,返回的HTML代码始终相同。进一步探究后了解到,该网站的数据是通过Ajax异步加载的,可通过HTTP查看详细的JSON响应。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
  • 本文介绍了如何通过 XMLHttpRequest 对象在不同浏览器中实现 AJAX 的 POST 和 GET 请求,并详细说明了 XMLHttpRequest 的五个状态及其含义。 ... [详细]
author-avatar
田小多
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有