@Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub String rich = Constants.RICH_TEXTS[position]; // 通过迭代装饰方式构造解析器。 IParser parser = new SmileyParser(mContext); parser = new ImageParser(mContext, parser); parser = new HyperlinkParser(mContext, parser); parser = new WeburlParser(mContext, parser); // 执行解析并返回解析文本段队列。 ParseManager manager = new ParseManager(); ArrayList<ParsedSegment> segments = manager.parse(parser, rich); // 用 Holder 模式更新列表数据。 CustomLayout layout = null; ViewHolder holder = null; if (null == convertView) { layout = new CustomLayout(mContext); AbsListView.LayoutParams params = new AbsListView.LayoutParams( AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT); layout.setLayoutParams(params); layout.setOrientation(LinearLayout.VERTICAL); layout.setBackgroundResource(R.drawable.list_item_background); holder = new ViewHolder(); holder.views = new ArrayList<View>(); layout.setTag(holder); } else { layout = (CustomLayout) convertView; holder = (ViewHolder) convertView.getTag(); } int i = 0; for (ParsedSegment segment : segments) { if (TextUtils.isEmpty(segment.text)) { continue; } if (MatchType.None == segment.type) { TextView textView = null; if (null == convertView) { textView = new TextView(mContext); LayoutParams p = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); p.bottomMargin = mContext.getResources().getDimensionPixelSize(R.dimen.rich_element_margin); textView.setLayoutParams(p); textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20); // 自定义 ClickableSpan 点击背景,有两种方法: // 1、自定义 LinkMovementMethod,重写其 onTouchEvent 方法; // 2、重写 TextView 的 OnTouchListener。 // 两种方法的核心思想都是获取 touch event 事件,通过对 TextView 中的 ClickableSpan // 文本设置和移除 BackgroundColorSpan 来改变其点击背景。 if (Constants.USE_CUSTOM_LINK) { textView.setMovementMethod(mLinkMovementMethod); } else { textView.setMovementMethod(LinkMovementMethod.getInstance()); textView.setOnTouchListener(onTouchListener); } textView.setClickable(false); layout.addView(textView); holder.views.add(textView); } else { textView = (TextView) holder.views.get(i); } textView.setText(segment.text); ++i; } else if (MatchType.Image == segment.type) { ImageView imgView = null; if (null == convertView) { imgView = new ImageView(mContext); LayoutParams p = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); p.bottomMargin = mContext.getResources().getDimensionPixelSize(R.dimen.rich_element_margin); imgView.setMaxHeight( mContext.getResources().getDimensionPixelSize(R.dimen.image_max_height)); imgView.setLayoutParams(p); layout.addView(imgView); holder.views.add(imgView); } else { imgView = (ImageView) holder.views.get(i); } // 异步加载图片。 mImageLoader.displayImage( segment.text.toString(), imgView, mOptions, mAnimateFirstListener); ++i; } } return layout; }
private void initialise() // we have to initialize each and everything we use from layout in order to use // them { customLayout = (CustomLayout) findViewById(R.id.parentLayout); customLayout.setListener(this); rainySeason = (CheckBox) findViewById(R.id.rainySeason); myPrefs = this.getSharedPreferences("myPrefs", MODE_PRIVATE); prefsEditor = myPrefs.edit(); llBelow = (LinearLayout) findViewById(R.id.llBelow); database = new DatabaseHandler(getApplicationContext()); tvAccessories = (TextView) findViewById(R.id.tvAccessories); tvClothes = (TextView) findViewById(R.id.tvClothes); tvBags = (TextView) findViewById(R.id.tvBags); tvFootwear = (TextView) findViewById(R.id.tvFootwear); gridAccesories = (GridView) findViewById(R.id.gridAccesories); gridBags = (GridView) findViewById(R.id.gridBags); gridClothes = (GridView) findViewById(R.id.gridClothes); gridFootwear = (GridView) findViewById(R.id.gridFootwear); llForDisplay = (LinearLayout) findViewById(R.id.llForDisplay); tvAddItem = (TextView) findViewById(R.id.tvAddItem); llForAdding = (ScrollView) findViewById(R.id.llForAdding); edBrand = (EditText) findViewById(R.id.edBrand); edColor = (EditText) findViewById(R.id.edColor); edDateOfPurchase = (TextView) findViewById(R.id.edDateOfPurchase); edLastAccessedDate = (TextView) findViewById(R.id.edLastAccessedDate); edTitle = (EditText) findViewById(R.id.edTitle); spinnerdressCode = (Spinner) findViewById(R.id.spinnerdressCode); spinnerItem = (Spinner) findViewById(R.id.spinnerItem); spinnerlocation = (Spinner) findViewById(R.id.spinnerlocation); spinnerSeason = (Spinner) findViewById(R.id.spinnerSeason); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, seasonArray); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerSeason.setAdapter(adapter); ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, seasonDressCode); adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerdressCode.setAdapter(adapter1); ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, seasonItemType); adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerItem.setAdapter(adapter2); ArrayAdapter<String> adapter3 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, seasonlocation); adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinnerlocation.setAdapter(adapter3); }