聊天对话反馈到ListView,点击读取
2016-05-26 11:33
375 查看
TextDialogueActivity 1) 主要是用于信息创建,启动第二个Activity,
2) 信息读取,显示在ListView中,
3) 点击ListView,将组名传参,以及启动第二个Activity,读取到之前的信息
package com.yeezone.cluster;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.content.BroadcastReceiver;
import android.util.Log;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.os.MessageQueue;
import android.os.Looper;
import android.graphics.Color;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
import com.yeezone.atservice.common.ATManager;
import com.yeezone.atservice.common.TrunkGroupInfo;
import com.yeezone.atservice.common.TrunkRingInfo;
import com.yeezone.atservice.common.TrunkSmsInfo;
public class TextDialogueActivity extends Activity {
private static final String TAG = "TextDialogueActivity";
private MenuItem mMenuNewMessage;
private GroupListViewAdapter mAdapter;
private List<String> data = new ArrayList<String>();
private ComeModle mComeModle;
private Cursor mCursor;
private ListView mListView;
private int GROUP_ID = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("action.refreshList");
registerReceiver(mRefreshBroadcastReceiver, intentFilter);
initViews();
}
private void initViews() {
setContentView(R.layout.text_dialogue);
mListView = (ListView) findViewById(R.id.listView);
Log.d(TAG, "data count:" + data.size());
mComeModle = new ComeModle(TextDialogueActivity.this);
mCursor=mComeModle.lookGroupToCursor();
data = mComeModle.lookGroup();
Log.d(TAG, "data count:" + data.size());
mAdapter = new GroupListViewAdapter(this, data);
mAdapter.notifyDataSetChanged();
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mCursor.moveToPosition(position);
GROUP_ID = mCursor.getInt(0);
String GROUP_NAME=mCursor.getString(1);
Log.d(TAG, String.valueOf(GROUP_ID));
Log.d(TAG, "name:"+GROUP_NAME);
Intent intent = new Intent(TextDialogueActivity.this,CreateMessageActivity.class);
intent.putExtra("id",GROUP_ID);
intent.putExtra("name",GROUP_NAME);
startActivity(intent);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.conversation_list_menu, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
mMenuNewMessage = menu.findItem(R.id.action_compose_new);
// mMenuGroupListSettings.setVisible(true);
// mMenuAbout.setVisible(true);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent intent;
switch (item.getItemId()) {
case R.id.action_compose_new:
intent = new Intent(this, CreateMessageActivity.class);
startActivity(intent);
break;
}
return super.onOptionsItemSelected(item);
}
// broadcast receiver
private BroadcastReceiver mRefreshBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("action.refreshList"))
{
mAdapter.notifyDataSetChanged();
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mRefreshBroadcastReceiver);
}
}
CreateMessageActivity
1)新信息创建,进行判断
2)如果点击,根据之前传递的群主名读取到相关数据
3)根据数据库读取到群主名,判断是否重复,如果重复不新添加到ListView中
package com.yeezone.cluster;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.BroadcastReceiver;
import android.util.Log;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.os.MessageQueue;
import android.os.Looper;
import android.graphics.Color;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import java.util.List;
import org.apache.http.impl.client.TunnelRefusedException;
import java.util.ArrayList;
import com.yeezone.atservice.common.ATManager;
import com.yeezone.atservice.common.TrunkGroupInfo;
import com.yeezone.atservice.common.TrunkRingInfo;
import com.yeezone.atservice.common.TrunkSmsInfo;
public class CreateMessageActivity extends Activity {
private final String TAG = "CreateMessageActivity";
private List<RecorderUtil> data = new ArrayList<RecorderUtil>();
private List<String> mData = new ArrayList<String>();
private static ChatItemListViewAdapter mAdapter = null;
private ComeModle mComeModle;
private ListView mListView;
private EditText mEditText;
private EditText mGroup;
private ImageButton mButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initViews();
}
private void initViews() {
setContentView(R.layout.create_message);
mListView = (ListView) findViewById(R.id.listView_chat);
mEditText = (EditText) findViewById(R.id.text_input_box);
mGroup = (EditText) findViewById(R.id.send_to_people);
mButton = (ImageButton) findViewById(R.id.text_input_button);
mComeModle = new ComeModle(CreateMessageActivity.this);
try {
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
int groupId = bundle.getInt("id");
String GROUP_NAME = bundle.getString("name");
Log.d(TAG, "groupId" + groupId);
Log.d(TAG, "name:" + GROUP_NAME);
data = mComeModle.findWordByName(GROUP_NAME);
mGroup.setText(GROUP_NAME);
scrollToBottomListItem();
} catch (Exception e) {
Log.i("exception", e.toString());
}
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String text = mEditText.getEditableText().toString();
String groupName = mGroup.getEditableText().toString();
if (groupName.equals("")) {
Toast.makeText(CreateMessageActivity.this, getString(R.string.group_content), Toast.LENGTH_LONG)
.show();
} else if (text.equals("")) {
Toast.makeText(CreateMessageActivity.this, getString(R.string.shuru_content), Toast.LENGTH_LONG)
.show();
} else {
mComeModle.saveWord(groupName, 1, text);
Intent intent = new Intent();
intent.setAction("action.refreshList");
sendBroadcast(intent);
mEditText.setText("");
RecorderUtil recorder = new RecorderUtil(groupName, 1, text);
data.add(recorder);
mAdapter.notifyDataSetChanged();
scrollToBottomListItem();
mData = mComeModle.lookGroup();
Log.d(TAG, "mdata:" + mData.size());
if (mData.size() == 0) {
Log.d(TAG, "mdata:" + "is 0??");
mComeModle.saveGroup(groupName);
} else {
if (mData.contains(groupName)) {
Log.d(TAG, "same");
return;
} else {
mComeModle.saveGroup(groupName);
Log.d(TAG, "different");
}
}
}
}
});
mAdapter = new ChatItemListViewAdapter(this, data);
mListView.setAdapter(mAdapter);
}
/**
* mListView.getAdapter().getCount()-1
*
* @Description 滑动到列表底部
*/
private void scrollToBottomListItem() {
mListView.setSelection(mListView.getAdapter().getCount() - 1);
}
}
有关数据库代码
package com.yeezone.cluster;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.BroadcastReceiver;
import android.util.Log;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.os.MessageQueue;
import android.os.Looper;
import android.graphics.Color;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import java.util.List;
import org.apache.http.impl.client.TunnelRefusedException;
import java.util.ArrayList;
import com.yeezone.atservice.common.ATManager;
import com.yeezone.atservice.common.TrunkGroupInfo;
import com.yeezone.atservice.common.TrunkRingInfo;
import com.yeezone.atservice.common.TrunkSmsInfo;
public class CreateMessageActivity extends Activity {
private final String TAG = "CreateMessageActivity";
private List<RecorderUtil> data = new ArrayList<RecorderUtil>();
private List<String> mData = new ArrayList<String>();
private static ChatItemListViewAdapter mAdapter = null;
private ComeModle mComeModle;
private ListView mListView;
private EditText mEditText;
private EditText mGroup;
private ImageButton mButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initViews();
}
private void initViews() {
setContentView(R.layout.create_message);
mListView = (ListView) findViewById(R.id.listView_chat);
mEditText = (EditText) findViewById(R.id.text_input_box);
mGroup = (EditText) findViewById(R.id.send_to_people);
mButton = (ImageButton) findViewById(R.id.text_input_button);
mComeModle = new ComeModle(CreateMessageActivity.this);
try {
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
int groupId = bundle.getInt("id");
String GROUP_NAME = bundle.getString("name");
Log.d(TAG, "groupId" + groupId);
Log.d(TAG, "name:" + GROUP_NAME);
data = mComeModle.findWordByName(GROUP_NAME);
mGroup.setText(GROUP_NAME);
scrollToBottomListItem();
} catch (Exception e) {
Log.i("exception", e.toString());
}
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String text = mEditText.getEditableText().toString();
String groupName = mGroup.getEditableText().toString();
if (groupName.equals("")) {
Toast.makeText(CreateMessageActivity.this, getString(R.string.group_content), Toast.LENGTH_LONG)
.show();
} else if (text.equals("")) {
Toast.makeText(CreateMessageActivity.this, getString(R.string.shuru_content), Toast.LENGTH_LONG)
.show();
} else {
mComeModle.saveWord(groupName, 1, text);
Intent intent = new Intent();
intent.setAction("action.refreshList");
sendBroadcast(intent);
mEditText.setText("");
RecorderUtil recorder = new RecorderUtil(groupName, 1, text);
data.add(recorder);
mAdapter.notifyDataSetChanged();
scrollToBottomListItem();
mData = mComeModle.lookGroup();
Log.d(TAG, "mdata:" + mData.size());
if (mData.size() == 0) {
Log.d(TAG, "mdata:" + "is 0??");
mComeModle.saveGroup(groupName);
} else {
if (mData.contains(groupName)) {
Log.d(TAG, "same");
return;
} else {
mComeModle.saveGroup(groupName);
Log.d(TAG, "different");
}
}
}
}
});
mAdapter = new ChatItemListViewAdapter(this, data);
mListView.setAdapter(mAdapter);
}
/**
* mListView.getAdapter().getCount()-1
*
* @Description 滑动到列表底部
*/
private void scrollToBottomListItem() {
mListView.setSelection(mListView.getAdapter().getCount() - 1);
}
}
2) 信息读取,显示在ListView中,
3) 点击ListView,将组名传参,以及启动第二个Activity,读取到之前的信息
package com.yeezone.cluster;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.content.BroadcastReceiver;
import android.util.Log;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.os.MessageQueue;
import android.os.Looper;
import android.graphics.Color;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
import com.yeezone.atservice.common.ATManager;
import com.yeezone.atservice.common.TrunkGroupInfo;
import com.yeezone.atservice.common.TrunkRingInfo;
import com.yeezone.atservice.common.TrunkSmsInfo;
public class TextDialogueActivity extends Activity {
private static final String TAG = "TextDialogueActivity";
private MenuItem mMenuNewMessage;
private GroupListViewAdapter mAdapter;
private List<String> data = new ArrayList<String>();
private ComeModle mComeModle;
private Cursor mCursor;
private ListView mListView;
private int GROUP_ID = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("action.refreshList");
registerReceiver(mRefreshBroadcastReceiver, intentFilter);
initViews();
}
private void initViews() {
setContentView(R.layout.text_dialogue);
mListView = (ListView) findViewById(R.id.listView);
Log.d(TAG, "data count:" + data.size());
mComeModle = new ComeModle(TextDialogueActivity.this);
mCursor=mComeModle.lookGroupToCursor();
data = mComeModle.lookGroup();
Log.d(TAG, "data count:" + data.size());
mAdapter = new GroupListViewAdapter(this, data);
mAdapter.notifyDataSetChanged();
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mCursor.moveToPosition(position);
GROUP_ID = mCursor.getInt(0);
String GROUP_NAME=mCursor.getString(1);
Log.d(TAG, String.valueOf(GROUP_ID));
Log.d(TAG, "name:"+GROUP_NAME);
Intent intent = new Intent(TextDialogueActivity.this,CreateMessageActivity.class);
intent.putExtra("id",GROUP_ID);
intent.putExtra("name",GROUP_NAME);
startActivity(intent);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.conversation_list_menu, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
mMenuNewMessage = menu.findItem(R.id.action_compose_new);
// mMenuGroupListSettings.setVisible(true);
// mMenuAbout.setVisible(true);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent intent;
switch (item.getItemId()) {
case R.id.action_compose_new:
intent = new Intent(this, CreateMessageActivity.class);
startActivity(intent);
break;
}
return super.onOptionsItemSelected(item);
}
// broadcast receiver
private BroadcastReceiver mRefreshBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("action.refreshList"))
{
mAdapter.notifyDataSetChanged();
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mRefreshBroadcastReceiver);
}
}
CreateMessageActivity
1)新信息创建,进行判断
2)如果点击,根据之前传递的群主名读取到相关数据
3)根据数据库读取到群主名,判断是否重复,如果重复不新添加到ListView中
package com.yeezone.cluster;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.BroadcastReceiver;
import android.util.Log;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.os.MessageQueue;
import android.os.Looper;
import android.graphics.Color;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import java.util.List;
import org.apache.http.impl.client.TunnelRefusedException;
import java.util.ArrayList;
import com.yeezone.atservice.common.ATManager;
import com.yeezone.atservice.common.TrunkGroupInfo;
import com.yeezone.atservice.common.TrunkRingInfo;
import com.yeezone.atservice.common.TrunkSmsInfo;
public class CreateMessageActivity extends Activity {
private final String TAG = "CreateMessageActivity";
private List<RecorderUtil> data = new ArrayList<RecorderUtil>();
private List<String> mData = new ArrayList<String>();
private static ChatItemListViewAdapter mAdapter = null;
private ComeModle mComeModle;
private ListView mListView;
private EditText mEditText;
private EditText mGroup;
private ImageButton mButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initViews();
}
private void initViews() {
setContentView(R.layout.create_message);
mListView = (ListView) findViewById(R.id.listView_chat);
mEditText = (EditText) findViewById(R.id.text_input_box);
mGroup = (EditText) findViewById(R.id.send_to_people);
mButton = (ImageButton) findViewById(R.id.text_input_button);
mComeModle = new ComeModle(CreateMessageActivity.this);
try {
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
int groupId = bundle.getInt("id");
String GROUP_NAME = bundle.getString("name");
Log.d(TAG, "groupId" + groupId);
Log.d(TAG, "name:" + GROUP_NAME);
data = mComeModle.findWordByName(GROUP_NAME);
mGroup.setText(GROUP_NAME);
scrollToBottomListItem();
} catch (Exception e) {
Log.i("exception", e.toString());
}
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String text = mEditText.getEditableText().toString();
String groupName = mGroup.getEditableText().toString();
if (groupName.equals("")) {
Toast.makeText(CreateMessageActivity.this, getString(R.string.group_content), Toast.LENGTH_LONG)
.show();
} else if (text.equals("")) {
Toast.makeText(CreateMessageActivity.this, getString(R.string.shuru_content), Toast.LENGTH_LONG)
.show();
} else {
mComeModle.saveWord(groupName, 1, text);
Intent intent = new Intent();
intent.setAction("action.refreshList");
sendBroadcast(intent);
mEditText.setText("");
RecorderUtil recorder = new RecorderUtil(groupName, 1, text);
data.add(recorder);
mAdapter.notifyDataSetChanged();
scrollToBottomListItem();
mData = mComeModle.lookGroup();
Log.d(TAG, "mdata:" + mData.size());
if (mData.size() == 0) {
Log.d(TAG, "mdata:" + "is 0??");
mComeModle.saveGroup(groupName);
} else {
if (mData.contains(groupName)) {
Log.d(TAG, "same");
return;
} else {
mComeModle.saveGroup(groupName);
Log.d(TAG, "different");
}
}
}
}
});
mAdapter = new ChatItemListViewAdapter(this, data);
mListView.setAdapter(mAdapter);
}
/**
* mListView.getAdapter().getCount()-1
*
* @Description 滑动到列表底部
*/
private void scrollToBottomListItem() {
mListView.setSelection(mListView.getAdapter().getCount() - 1);
}
}
有关数据库代码
package com.yeezone.cluster;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.BroadcastReceiver;
import android.util.Log;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.os.MessageQueue;
import android.os.Looper;
import android.graphics.Color;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import java.util.List;
import org.apache.http.impl.client.TunnelRefusedException;
import java.util.ArrayList;
import com.yeezone.atservice.common.ATManager;
import com.yeezone.atservice.common.TrunkGroupInfo;
import com.yeezone.atservice.common.TrunkRingInfo;
import com.yeezone.atservice.common.TrunkSmsInfo;
public class CreateMessageActivity extends Activity {
private final String TAG = "CreateMessageActivity";
private List<RecorderUtil> data = new ArrayList<RecorderUtil>();
private List<String> mData = new ArrayList<String>();
private static ChatItemListViewAdapter mAdapter = null;
private ComeModle mComeModle;
private ListView mListView;
private EditText mEditText;
private EditText mGroup;
private ImageButton mButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initViews();
}
private void initViews() {
setContentView(R.layout.create_message);
mListView = (ListView) findViewById(R.id.listView_chat);
mEditText = (EditText) findViewById(R.id.text_input_box);
mGroup = (EditText) findViewById(R.id.send_to_people);
mButton = (ImageButton) findViewById(R.id.text_input_button);
mComeModle = new ComeModle(CreateMessageActivity.this);
try {
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
int groupId = bundle.getInt("id");
String GROUP_NAME = bundle.getString("name");
Log.d(TAG, "groupId" + groupId);
Log.d(TAG, "name:" + GROUP_NAME);
data = mComeModle.findWordByName(GROUP_NAME);
mGroup.setText(GROUP_NAME);
scrollToBottomListItem();
} catch (Exception e) {
Log.i("exception", e.toString());
}
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String text = mEditText.getEditableText().toString();
String groupName = mGroup.getEditableText().toString();
if (groupName.equals("")) {
Toast.makeText(CreateMessageActivity.this, getString(R.string.group_content), Toast.LENGTH_LONG)
.show();
} else if (text.equals("")) {
Toast.makeText(CreateMessageActivity.this, getString(R.string.shuru_content), Toast.LENGTH_LONG)
.show();
} else {
mComeModle.saveWord(groupName, 1, text);
Intent intent = new Intent();
intent.setAction("action.refreshList");
sendBroadcast(intent);
mEditText.setText("");
RecorderUtil recorder = new RecorderUtil(groupName, 1, text);
data.add(recorder);
mAdapter.notifyDataSetChanged();
scrollToBottomListItem();
mData = mComeModle.lookGroup();
Log.d(TAG, "mdata:" + mData.size());
if (mData.size() == 0) {
Log.d(TAG, "mdata:" + "is 0??");
mComeModle.saveGroup(groupName);
} else {
if (mData.contains(groupName)) {
Log.d(TAG, "same");
return;
} else {
mComeModle.saveGroup(groupName);
Log.d(TAG, "different");
}
}
}
}
});
mAdapter = new ChatItemListViewAdapter(this, data);
mListView.setAdapter(mAdapter);
}
/**
* mListView.getAdapter().getCount()-1
*
* @Description 滑动到列表底部
*/
private void scrollToBottomListItem() {
mListView.setSelection(mListView.getAdapter().getCount() - 1);
}
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories