标签:android style blog http color java os io
package com.yuchongxia.internetradio.widget; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import com.yuchongxia.internetradio.R; public class MessageView extends LinearLayout { private OnClickListener ml; public MessageView(Context context) { super(context); LayoutInflater.from(getContext()).inflate(R.layout.message_view, this); findViewById(R.id.button_refresh).setOnClickListener(onClickListener); } public MessageView(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(getContext()).inflate(R.layout.message_view, this); findViewById(R.id.button_refresh).setOnClickListener(onClickListener); } OnClickListener onClickListener = new OnClickListener() { @Override public void onClick(View v) { if (ml != null) { ml.onClick(v); } } }; @Override public void setOnClickListener(OnClickListener l) { ml = l; super.setOnClickListener(ml); } }
package com.yuchongxia.internetradio.widget; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Locale; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.content.Context; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.RelativeLayout; import com.yuchongxia.internetradio.R; import com.yuchongxia.internetradio.constant.Constant; import com.yuchongxia.internetradio.pojo.ContentCategory; import com.yuchongxia.internetradio.util.HttpClientUtil; import com.yuchongxia.internetradio.util.Util; /** * 分类导航组件 * * @author Andy * @date 2013-9-3 */ public class NavigationBar extends RelativeLayout { private Context context; private RelativeLayout.LayoutParams params; private RelativeLayout container; // 焦点所在位置 private int focusPosition = 1; private OnMyClickListener onMyClickListener; private OnDataPreparedListener onDataPreparedListener; private List<ContentCategory> list; // private ContentCategoryDao contentCategoryDao; public NavigationBar(Context context, AttributeSet attrs) throws IOException, JSONException { super(context, attrs); this.context = context; LayoutInflater.from(getContext()).inflate(R.layout.navigation_bar, this); container = (RelativeLayout) findViewById(R.id.layout_navigationBar); list = new ArrayList<ContentCategory>(); // contentCategoryDao = new ContentCategoryDao(context); if (Util.isNetworkAvailable(context)) { getRingCategory(); } } // public void writeDB() { // new Thread() { // @Override // public void run() { // super.run(); // // contentCategoryDao.insert(list); // } // }.start(); // } public void parseJson(final String data) { new Thread() { @Override public void run() { try { JSONArray jsonArray = new JSONArray(data); if (jsonArray == null || jsonArray.length() == 0) { handler.sendEmptyMessage(0); return; } Log.i(Constant.TAG, "开始解析网络获取的数据"); for (int i = 0; i < jsonArray.length(); i++) { ContentCategory contentCategory = new ContentCategory(); JSONObject object = (JSONObject) jsonArray.getJSONObject(i); int categoryId = object.getInt("categoryId"); String categoryName = object.getString("categoryName"); int sort = object.getInt("order"); int publishTime = object.getInt("publishTime"); contentCategory.setCategoryId(categoryId); contentCategory.setCategoryName(categoryName); contentCategory.setSort(sort); contentCategory.setPublishTime(publishTime); list.add(contentCategory); } Log.i(Constant.TAG, "解析后数据 jsList size:" + list.size()); // 全部 ContentCategory temp = new ContentCategory(); temp.setCategoryId(-1); temp.setCategoryName(context.getString(R.string.all)); list.add(0, temp); temp = new ContentCategory(); temp.setCategoryId(-2); temp.setCategoryName(context.getString(R.string.collect)); list.add(0, temp); temp = new ContentCategory(); temp.setCategoryId(-3); temp.setCategoryName(context.getString(R.string.local_radio)); list.add(temp); temp = new ContentCategory(); temp.setCategoryId(-4); temp.setCategoryName(context.getString(R.string.more)); list.add(temp); handler.sendEmptyMessage(1); } catch (JSONException e) { Log.i(Constant.TAG, "解析数据时出错"); e.printStackTrace(); } } }.start(); } public void getRingCategory() { new Thread() { @Override public void run() { String data = HttpClientUtil.get(Constant.CONTENT_CATEGOARY_URL); parseJson(data); } }.start(); } public void layout() { container.removeAllViews(); NavigationButton btn; int cnt = list.size(); if (onDataPreparedListener != null) { Log.i(Constant.TAG, "prepared"); onDataPreparedListener.onPrepared(list); } for (int i = 0; i < cnt; i++) { params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); btn = new NavigationButton(context); btn.setId(i + 1); btn.setText(list.get(i).getCategoryName()); btn.setOnClickListener(clickListener); if (i == 0) { btn.setChoosed(true); } String language = Locale.getDefault().getLanguage(); String country = Locale.getDefault().getCountry(); // zh CN // zh TW // en ** if (language.equals("zh") && country.equals("CN")) { } else if (language.equals("zh") && country.equals("TW")) { } else { } if (i > 0) { params.addRule(RelativeLayout.BELOW, i); } container.addView(btn, params); } } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 0) { Log.i(Constant.TAG, "无法获取数据"); } else if (msg.what == 1) { layout(); } } }; /** * 刷新NavigationBar */ public void refresh() { getRingCategory(); // 恢复当前位置标示 focusPosition = 1; } /** * 取 NavigationBar 第一项的分类id * * @return 第一项的分类id */ // public String getFirst() { // if (list.size() != 0) { // return list.get(0).getCategoryId(); // } else { // return ""; // } // } /** * 焦点是否在第一项 */ public boolean isFocusOnFirst() { return focusPosition == 1 ? true : false; } public void setChoosed(int id) { NavigationButton btn = (NavigationButton) findViewById(focusPosition); btn.setChoosed(false); btn = (NavigationButton) findViewById(id); btn.setChoosed(true); // 标记当前选中项 focusPosition = id; } OnClickListener clickListener = new OnClickListener() { @Override public void onClick(View v) { int id = v.getId(); // 取消选中 NavigationButton btn = (NavigationButton) findViewById(focusPosition); btn.setChoosed(false); focusPosition = id; // 重新选中 btn = (NavigationButton) findViewById(id); btn.setChoosed(true); if (onMyClickListener != null && list.size() != 0) { onMyClickListener.onClick(id - 1); } } }; /** * 回调接口 * */ public interface OnDataPreparedListener { public void onPrepared(List<ContentCategory> list); } public interface OnMyClickListener { public void onClick(int buttonId); } /** * 设置一个监听,供外部调用的方法 */ public void setOnMyClickListener(OnMyClickListener listener) { this.onMyClickListener = listener; } /** * 设置一个监听,供外部调用的方法 */ public void setOnDataPreparedListener(OnDataPreparedListener onDataPreparedListener) { this.onDataPreparedListener = onDataPreparedListener; } }
setOnClickListener,布布扣,bubuko.com
标签:android style blog http color java os io
原文地址:http://www.cnblogs.com/xyc20080413/p/3912568.html