package com.android.caigang.view; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.GridView; import android.widget.ImageView; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.android.caigang.R; import com.android.caigang.db.DataHelper; import com.android.caigang.model.UserInfo; import com.android.caigang.util.DataBaseContext; import com.android.caigang.util.TextUtil; import com.android.caigang.util.WeiboContext; import com.mime.qweibo.examples.MyWeiboSync; public class AddWeiboActivity extends Activity implements OnClickListener{ private DataHelper dataHelper; private UserInfo user; private String user_default_name; private MyWeiboSync weibo; private ListView listView; private EditText weibo_content; private Button send_btn; private Button add_cmamera_btn; private Button add_at_btn; private Button add_topic_btn; private Button add_expression_btn; private Button add_location_btn; private GridView expressionGrid; private List<Map<String,Object>> expressionList; private ExpressionAdapter expressionAdapter; private FrameLayout operation_layout; private RelativeLayout add_top_bar; private ListView atListView; private RelativeLayout atRootLayout; private EditText atEditText; private Button atEnterBtn; private TextView topic_tip; private TextView add_top_tip; private RelativeLayout.LayoutParams atEdiLayoutParams,atEnterBtnLayoutParams,atListViewLayoutParams,topicTipViewLayoutParams; private JSONArray array; private Handler handler; private ArrayAdapter atAdapter; private List<String> atList; private AtThread thread; private List<String> matchStrList;//ѡ��atListƥ����ַ��� private int flag; private static int FLAG_1 = 1; private static int FLAG_2 = 2;//1��2����atEnterBtn�ĸ��׿ؼ���ͬ private String to;//Ҫ�Ի����� private String from_flag;//��־��ת����д�㲥�����ǶԻ�������΢�� private String reid; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.add_weibo); setUpViews(); setUpListeners(); Intent intent = getIntent(); String tip = intent.getStringExtra("tip");//���ñ���������ʾ add_top_tip.setText(tip); String content = intent.getStringExtra("content"); weibo_content.setText(content);//�������� to = intent.getStringExtra("to"); from_flag = intent.getStringExtra("from_flag"); reid = intent.getStringExtra("reid"); dataHelper = DataBaseContext.getInstance(getApplicationContext()); weibo = WeiboContext.getInstance(); SharedPreferences preferences = getSharedPreferences("default_user",Activity.MODE_PRIVATE); user_default_name = preferences.getString("user_default_name", "");//ȡ��΢��Ĭ�ϵ�¼�˺���Ϣ handler = new AtHandler(); thread = new AtThread(); thread.start();//����һ���̻߳�ȡ���� } private void setUpViews(){ weibo_content = (EditText)findViewById(R.id.weibo_content); send_btn = (Button)findViewById(R.id.send_btn); add_cmamera_btn = (Button)findViewById(R.id.add_cmamera_btn); add_at_btn = (Button)findViewById(R.id.add_at_btn); add_topic_btn = (Button)findViewById(R.id.add_topic_btn); add_expression_btn = (Button)findViewById(R.id.add_expression_btn); add_location_btn = (Button)findViewById(R.id.add_location_btn); add_top_bar = (RelativeLayout)findViewById(R.id.add_top_bar); operation_layout = (FrameLayout)findViewById(R.id.operation_layout); expressionGrid = new GridView(this); expressionGrid.setNumColumns(5); expressionList = buildExpressionsList(); expressionAdapter = new ExpressionAdapter(AddWeiboActivity.this, expressionList); expressionGrid.setAdapter(expressionAdapter); add_top_tip = (TextView)findViewById(R.id.add_top_tip); //���´�����������setUpViews�������Ǹ��˴��⵰����ϵ�����벼�֣���λ�ϴ���Ըij�xml���֣����� atRootLayout = new RelativeLayout(AddWeiboActivity.this); atEditText = new EditText(AddWeiboActivity.this); atEditText.setId(10000); atEnterBtn = new Button(AddWeiboActivity.this); atEnterBtn.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_enter_selector)); atListView = new ListView(AddWeiboActivity.this); atListView.setCacheColorHint(Color.TRANSPARENT);//��ֹ����ʱ���ֺڿ죬���ſ���ע�͵��˾���һ�� atListView.setDivider(getResources().getDrawable(R.drawable.list_divider));//���÷ָ��� atListView.setBackgroundColor(Color.argb(255, 239, 239, 239));//alphaͨ��һ����Ҫ���ó�͸�����ˣ�Ҫ��ȻtextViewʲôҲ������,��Ϊ��������˺ܾã���Ϊ�������,���ŷ�����͸���� topic_tip = new TextView(AddWeiboActivity.this); topic_tip.setText("�����뻰��"); topic_tip.setTextSize(20); topic_tip.setTextColor(Color.argb(255, 90, 142, 189));//alphaͨ��һ����Ҫ���ó�͸�����ˣ�Ҫ��ȻtextViewʲôҲ������,��Ϊ��������˺ܾã���Ϊ�������,���ŷ�����͸���� atRootLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); atEdiLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,80); atEnterBtnLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); atListViewLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT); topicTipViewLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); //��Ӳ���Լ�� atEdiLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); atEnterBtnLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP,RelativeLayout.TRUE); atEnterBtnLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,RelativeLayout.TRUE); atEnterBtnLayoutParams.setMargins(0, 10, 10, 0);//���ñ߾࣬�ֱ�������ϣ��ң��� atListViewLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM,RelativeLayout.TRUE); atListViewLayoutParams.addRule(RelativeLayout.BELOW, atEditText.getId()); topicTipViewLayoutParams.addRule(RelativeLayout.BELOW, atEditText.getId()); } private void setUpListeners(){ send_btn.setOnClickListener(this); add_cmamera_btn.setOnClickListener(this); add_at_btn.setOnClickListener(this); add_topic_btn.setOnClickListener(this); add_expression_btn.setOnClickListener(this); add_location_btn.setOnClickListener(this); expressionGrid.setOnItemClickListener(new GridItemClickListener()); atListView.setOnItemClickListener(new AtListViewItemListener()); atEditText.addTextChangedListener(new MyTextWatcher()); atEnterBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { add_top_bar.setVisibility(View.VISIBLE); weibo_content.setVisibility(View.VISIBLE); operation_layout.setVisibility(View.GONE); operation_layout.removeAllViews();//������Ҫ�Ƴ��� if(flag==FLAG_1){ weibo_content.setText(weibo_content.getText()+"@"); }else if(flag==FLAG_2){ weibo_content.setText(weibo_content.getText()+"#"+atEditText.getText()+"#"); } } }); } class AtThread extends Thread { @Override public void run() { String jsonStr = weibo.getFans(weibo.getAccessTokenKey(), weibo.getAccessTokenSecrect(), 20, 0, user_default_name); try { JSONObject dataObj = new JSONObject(jsonStr).getJSONObject("data"); array = dataObj.getJSONArray("info"); } catch (JSONException e) { e.printStackTrace(); } //֪ͨhandler�������� Message msg = handler.obtainMessage(); handler.sendMessage(msg); } } class AtHandler extends Handler { @Override public void handleMessage(Message msg){ int size = array.length(); atList = new ArrayList<String>(); for(int i = 0;i<size;i++){ JSONObject data = array.optJSONObject(i); try { atList.add(data.getString("nick")+"("+data.getString("name")+")"); } catch (JSONException e) { e.printStackTrace(); } } matchStrList = new ArrayList<String>(); matchStrList.addAll(atList); atAdapter = new ArrayAdapter<String>(AddWeiboActivity.this,R.layout.at_list_item,R.id.at_nick_name,atList); atListView.setAdapter(atAdapter); } } class ExpressionAdapter extends BaseAdapter { private Context context; private LayoutInflater inflater; private List<Map<String,Object>> list; public ExpressionAdapter(Context context, List<Map<String,Object>> list) { super(); this.context = context; this.list = list; this.inflater = LayoutInflater.from(context); } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent){ Map<String,Object> map = list.get(position); ImageView image = new ImageView(context); image.setImageDrawable((Drawable)map.get("drawable")); return image; } } @Override public void onClick(View v) { if(operation_layout.getChildCount()>0){ add_top_bar.setVisibility(View.VISIBLE); weibo_content.setVisibility(View.VISIBLE); operation_layout.setVisibility(View.GONE); operation_layout.removeAllViews();//������Ҫ�Ƴ��� return; } switch (v.getId()) { case R.id.send_btn:{ String returnStr = null; if("write".equals(from_flag)){ returnStr = weibo.publishMsg(weibo.getAccessTokenKey(), weibo.getAccessTokenSecrect(), weibo_content.getText().toString()); try { JSONObject dataObj = new JSONObject(returnStr); if("ok".equals(dataObj.getString("msg"))){ Toast.makeText(AddWeiboActivity.this, "���ͳɹ�", Toast.LENGTH_SHORT).show();//���գ��ǵ�Ҫshow,ÿ�ζ������� } } catch (JSONException e) { e.printStackTrace(); } }else if("rebroad".equals(from_flag)){ returnStr = weibo.reBroad(weibo.getAccessTokenKey(), weibo.getAccessTokenSecrect(), weibo_content.getText().toString(),reid); try { JSONObject dataObj = new JSONObject(returnStr); if("ok".equals(dataObj.getString("msg"))){ Toast.makeText(AddWeiboActivity.this, "ת���ɹ�", Toast.LENGTH_SHORT).show();//���գ��ǵ�Ҫshow,ÿ�ζ������� } } catch (JSONException e) { e.printStackTrace(); } }else if("private".equals(from_flag)){ returnStr = weibo.addPrivate(weibo.getAccessTokenKey(), weibo.getAccessTokenSecrect(), weibo_content.getText().toString(), to); try { JSONObject dataObj = new JSONObject(returnStr); if("ok".equals(dataObj.getString("msg"))){ Toast.makeText(AddWeiboActivity.this, "����˽�ųɹ�", Toast.LENGTH_SHORT).show();//���գ��ǵ�Ҫshow,ÿ�ζ������� } } catch (JSONException e) { e.printStackTrace(); } }else if("comment".equals(from_flag)){ returnStr = weibo.addComment(weibo.getAccessTokenKey(),weibo.getAccessTokenSecrect(),weibo_content.getText().toString(),reid); try { JSONObject dataObj = new JSONObject(returnStr); if("ok".equals(dataObj.getString("msg"))){ Toast.makeText(AddWeiboActivity.this, "�ղسɹ�", Toast.LENGTH_SHORT).show();//���գ��ǵ�Ҫshow,ÿ�ζ������� } } catch (JSONException e) { e.printStackTrace(); } } } break; case R.id.add_cmamera_btn:{ } break; case R.id.add_at_btn:{ // ��̬����װview atRootLayout.removeAllViews();// ��װǰ�Ȱ����еĺ����õ� atEditText.setText("@"); flag = FLAG_1;//����atEnterBtn�����ĸ����水�� atRootLayout.addView(atEditText, atEdiLayoutParams); atRootLayout.addView(atEnterBtn, atEnterBtnLayoutParams); atRootLayout.addView(atListView, atListViewLayoutParams); operation_layout.addView(atRootLayout); add_top_bar.setVisibility(View.GONE);// ���������bar���ı��༭�򣬲���֮��atѡ���໥Ӱ�� weibo_content.setVisibility(View.GONE); operation_layout.setVisibility(View.VISIBLE); } break; case R.id.add_topic_btn:{ //��̬����װview atRootLayout.removeAllViews();//��װǰ�Ȱ����еĺ����õ� atEditText.setText(""); flag = FLAG_2;//����atEnterBtn�����ĸ����水�� atRootLayout.addView(atEditText,atEdiLayoutParams); atRootLayout.addView(atEnterBtn,atEnterBtnLayoutParams); atRootLayout.addView(topic_tip,topicTipViewLayoutParams); operation_layout.addView(atRootLayout); add_top_bar.setVisibility(View.GONE);// ���������bar���ı��༭�򣬲���֮��atѡ���໥Ӱ�� weibo_content.setVisibility(View.GONE); operation_layout.setVisibility(View.VISIBLE); } break; case R.id.add_expression_btn:{ add_top_bar.setVisibility(View.GONE);//���������bar���ı��༭�򣬲���֮�����ѡ���gridView�໥Ӱ�� weibo_content.setVisibility(View.GONE); operation_layout.addView(expressionGrid); operation_layout.setVisibility(View.VISIBLE); } break; case R.id.add_location_btn:{ } break; default: break; } } private List<Map<String,Object>> buildExpressionsList(){ List<Map<String,Object>> list = new ArrayList<Map<String, Object>>(); DecimalFormat df = new DecimalFormat("000");//��ʽ������ for(int i = 0;i<105;i++){ Map<String,Object> map = new HashMap<String, Object>(); String formatStr = "h"+df.format(i); int drawableId = 0 ; try { drawableId = R.drawable.class.getDeclaredField(formatStr).getInt(this);//����ȡ��id������ط�ѭ���׷��䣬�Dz��Ǻܺ����ܰ�����û���Թ����鷳�кð취���ֵܽ��÷���һ�� } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } Drawable drawable = getResources().getDrawable(drawableId); map.put("drawableId", formatStr); map.put("drawable",drawable); list.add(map); } return list; } class GridItemClickListener implements OnItemClickListener { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position,long arg3) { Map<String, Object> map = expressionList.get(position); String drawableId = (String)map.get("drawableId"); add_top_bar.setVisibility(View.VISIBLE); weibo_content.setVisibility(View.VISIBLE); operation_layout.setVisibility(View.GONE); operation_layout.removeAllViews();//������Ҫ�Ƴ��� String expressionStr=null; expressionStr = TextUtil.drawableIdToFaceName.get(drawableId); expressionStr="/"+expressionStr; weibo_content.setText(weibo_content.getText().toString()+expressionStr); } } class MyTextWatcher implements TextWatcher{ @Override public void afterTextChanged(Editable s){ String changingStr = atEditText.getText().toString(); if(changingStr.indexOf("@")!=-1){ changingStr = changingStr.substring(1); } int size = atList.size(); matchStrList.clear(); for(int i = 0;i<size;i++){ String currentStr = atList.get(i); if(currentStr.indexOf(changingStr)!=-1){ matchStrList.add(currentStr); } } atAdapter = new ArrayAdapter<String>(AddWeiboActivity.this,R.layout.at_list_item,R.id.at_nick_name,matchStrList); atAdapter.notifyDataSetChanged(); atListView.setAdapter(atAdapter); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before,int count) { } } class AtListViewItemListener implements OnItemClickListener{ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position,long arg3){ add_top_bar.setVisibility(View.VISIBLE); weibo_content.setVisibility(View.VISIBLE); operation_layout.setVisibility(View.GONE); operation_layout.removeAllViews();//������Ҫ�Ƴ��� String str = matchStrList.get(position); String nickStr = str.substring(0,str.indexOf("(")); weibo_content.setText(weibo_content.getText()+"@"+nickStr); } } }