`

【原创】android 实现气泡式listview

 
阅读更多
iphone中短信聊天都是那种气泡式的,当然,android短信也是,
那么我们如何实现这种效果呢?

我下面就简单的实现了一个demo,

其实就是一个listview,然后对adapter中getview的时候,根据自己的设定来获取不同的layout。
具体看代码:

public class MainActivity extends Activity {
	private ListView talkView;
	private ArrayList<DetailEntity> list = null;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        talkView = (ListView)findViewById(R.id.list);
        
        list = new ArrayList<DetailEntity>();
		DetailEntity d1 = new DetailEntity("Me","2012-04-26","Hello!",R.layout.list_say_me_item);
		list.add(d1);
		DetailEntity d2 = new DetailEntity("You","2012-04-26","Hi!",R.layout.list_say_he_item);
		list.add(d2);
		DetailEntity d3 = new DetailEntity("Me","2012-04-26","Waht is your name?",R.layout.list_say_he_item);
		list.add(d3);
		DetailEntity d4 = new DetailEntity("You","2012-04-26","****!",R.layout.list_say_me_item);
		list.add(d4);
        
        talkView.setAdapter(new DetailAdapter(MainActivity.this, list));
    }
}


然后是adapter了
public class DetailAdapter implements ListAdapter {
	private ArrayList<DetailEntity> coll;
	private Context ctx;

	public DetailAdapter(Context context, ArrayList<DetailEntity> coll) {
		ctx = context;
		this.coll = coll;
	}

	public boolean areAllItemsEnabled() {
		return false;
	}

	public boolean isEnabled(int arg0) {
		return false;
	}

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

	public Object getItem(int position) {
		return coll.get(position);
	}

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

	public int getItemViewType(int position) {
		return position;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		[color=red]DetailEntity entity = coll.get(position);
		int itemLayout = entity.getLayoutID();[/color]

		LinearLayout layout = new LinearLayout(ctx);
		LayoutInflater vi = (LayoutInflater) ctx
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		vi.inflate(itemLayout, layout, true);

		TextView tvName = (TextView) layout
				.findViewById(R.id.messagedetail_row_name);
		tvName.setText(entity.getName());

		TextView tvDate = (TextView) layout
				.findViewById(R.id.messagedetail_row_date);
		tvDate.setText(entity.getDate());

		TextView tvText = (TextView) layout
				.findViewById(R.id.messagedetail_row_text);
		tvText.setText(entity.getText());
		return layout;
	}

	public int getViewTypeCount() {
		return coll.size();
	}

	public boolean hasStableIds() {
		return false;
	}

	public boolean isEmpty() {
		return false;
	}

	public void registerDataSetObserver(DataSetObserver observer) {
	}

	public void unregisterDataSetObserver(DataSetObserver observer) {
	}

}


注意红色部分,获取到相应的layout。
就实现了气泡式的效果了。
效果图:

具体代码见附件。
  • 大小: 21.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics