import org.alljoyn.bus.sample.chat.ChatApplication;
import org.alljoyn.bus.sample.chat.Observable;
import org.alljoyn.bus.sample.chat.Observer;
import org.alljoyn.bus.sample.chat.DialogBuilder;
import java.lang.reflect.Array;
// ... more imports
public class UseActivity extends Activity implements Observer {
private static final String TAG = "chat.UseActivity";
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "onCreate()");
super.onCreate(savedInstanceState);
setContentView(R.layout.use);
ListView hlv = (ListView) findViewById(R.id.useHistoryList);
hlv.setAdapter(mHistoryList);
EditText messageBox = (EditText)findViewById(R.id.useMessage);
messageBox.setSingleLine();
messageBox.setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
message = view.getText().toString();
Log.i(TAG, "useMessage.onEditorAction(): got message " + message + ")");
mHistoryList.add(message);
mChatApplication.newLocalUserMessage(message);
view.setText("");
}
return true;
}
});
Button mAlertButton = (Button)findViewById(R.id.alert);
mAlertButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
message = "www.google.com" ;
mHistoryList.add(message);
mChatApplication.newLocalUserMessage(message);
}
});
mJoinButton = (Button)findViewById(R.id.useJoin);
mJoinButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(DIALOG_JOIN_ID);
}
});
mLeaveButton = (Button)findViewById(R.id.useLeave);
mLeaveButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(DIALOG_LEAVE_ID);
}
});
mChannelName = (TextView)findViewById(R.id.useChannelName);
mChannelStatus = (TextView)findViewById(R.id.useChannelStatus);
/*
* Keep a pointer to the Android Application class around. We use this
* as the Model for our MVC-based application. Whenever we are started
* we need to "check in" with the application so it can ensure that our
* required services are running.
*/
mChatApplication = (ChatApplication)getApplication();
mChatApplication.checkin();
/*
* Call down into the model to get its current state. Since the model
* outlives its Activities, this may actually be a lot of state and not
* just empty.
*/
updateChannelState();
updateHistory();
/*
* Now that we're all ready to go, we are ready to accept notifications
* from other components.
*/
mChatApplication.addObserver(this);
}
public void onDestroy() {
Log.i(TAG, "onDestroy()");
mChatApplication = (ChatApplication)getApplication();
mChatApplication.deleteObserver(this);
super.onDestroy();
}
public static final int DIALOG_JOIN_ID = 0;
public static final int DIALOG_LEAVE_ID = 1;
public static final int DIALOG_ALLJOYN_ERROR_ID = 2;
protected Dialog onCreateDialog(int id) {
Log.i(TAG, "onCreateDialog()");
Dialog result = null;
switch(id) {
case DIALOG_JOIN_ID:
{
DialogBuilder builder = new DialogBuilder();
result = builder.createUseJoinDialog(this, mChatApplication);
}
break;
case DIALOG_LEAVE_ID:
{
DialogBuilder builder = new DialogBuilder();
result = builder.createUseLeaveDialog(this, mChatApplication);
}
break;
case DIALOG_ALLJOYN_ERROR_ID:
{
DialogBuilder builder = new DialogBuilder();
result = builder.createAllJoynErrorDialog(this, mChatApplication);
}
break;
}
return result;
}
public synchronized void update(Observable o, Object arg) {
Log.i(TAG, "update(" + arg + ")");
String qualifier = (String)arg;
if (qualifier.equals(ChatApplication.APPLICATION_QUIT_EVENT)) {
Message message = mHandler.obtainMessage(HANDLE_APPLICATION_QUIT_EVENT);
mHandler.sendMessage(message);
}
if (qualifier.equals(ChatApplication.HISTORY_CHANGED_EVENT)) {
Message message = mHandler.obtainMessage(HANDLE_HISTORY_CHANGED_EVENT);
mHandler.sendMessage(message);
}
if (qualifier.equals(ChatApplication.USE_CHANNEL_STATE_CHANGED_EVENT)) {
Message message = mHandler.obtainMessage(HANDLE_CHANNEL_STATE_CHANGED_EVENT);
mHandler.sendMessage(message);
}
if (qualifier.equals(ChatApplication.ALLJOYN_ERROR_EVENT)) {
Message message = mHandler.obtainMessage(HANDLE_ALLJOYN_ERROR_EVENT);
mHandler.sendMessage(message);
}
}
private void updateHistory() {
Log.i(TAG, "updateHistory()");
List <String> messages = mChatApplication.getHistory();
mHistoryList = new SimpleAdapter (this, messages);
for (String message : messages) {
mHistoryList.add(message);
}
mHistoryList.notifyDataSetChanged();
}
private void updateChannelState() {
Log.i(TAG, "updateHistory()");
AllJoynService.UseChannelState channelState = mChatApplication.useGetChannelState();
String name = mChatApplication.useGetChannelName();
if (name == null) {
name = "Not set";
}
mChannelName.setText(name);
switch (channelState) {
case IDLE:
mChannelStatus.setText("Idle");
mJoinButton.setEnabled(true);
mLeaveButton.setEnabled(false);
break;
case JOINED:
mChannelStatus.setText("Joined");
mJoinButton.setEnabled(false);
mLeaveButton.setEnabled(true);
break;
}
}
/**
* An AllJoyn error has happened. Since this activity pops up first we
* handle the general errors. We also handle our own errors.
*/
private void alljoynError() {
if (mChatApplication.getErrorModule() == ChatApplication.Module.GENERAL ||
mChatApplication.getErrorModule() == ChatApplication.Module.USE) {
showDialog(DIALOG_ALLJOYN_ERROR_ID);
}
}
private static final int HANDLE_APPLICATION_QUIT_EVENT = 0;
private static final int HANDLE_HISTORY_CHANGED_EVENT = 1;
private static final int HANDLE_CHANNEL_STATE_CHANGED_EVENT = 2;
private static final int HANDLE_ALLJOYN_ERROR_EVENT = 3;
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case HANDLE_APPLICATION_QUIT_EVENT:
{
Log.i(TAG, "mHandler.handleMessage(): HANDLE_APPLICATION_QUIT_EVENT");
finish();
}
break;
case HANDLE_HISTORY_CHANGED_EVENT:
{
Log.i(TAG, "mHandler.handleMessage(): HANDLE_HISTORY_CHANGED_EVENT");
updateHistory();
break;
}
case HANDLE_CHANNEL_STATE_CHANGED_EVENT:
{
Log.i(TAG, "mHandler.handleMessage(): HANDLE_CHANNEL_STATE_CHANGED_EVENT");
updateChannelState();
break;
}
case HANDLE_ALLJOYN_ERROR_EVENT:
{
Log.i(TAG, "mHandler.handleMessage(): HANDLE_ALLJOYN_ERROR_EVENT");
alljoynError();
break;
}
default:
break;
}
}
};
private ChatApplication mChatApplication = null;
String message;
private SimpleAdapter mHistoryList;
private Button mJoinButton;
private Button mLeaveButton;
private TextView mChannelName;
private TextView mChannelStatus;
}
我在使自定义listView
适配器工作时遇到了一些麻烦。我在将消息值动态地添加到自定义适配器中时遇到问题。我动态获取了值,但是当我在代码中使用它时,应用程序崩溃或者什么也没显示。
import android.text.util.Linkify;
// ... more imports
public class SimpleAdapter extends ArrayAdapter<String> {
private final Context context;
private final List<String> values;
public SimpleAdapter(Context context, List <String> values) {
super(context, -1, values);
this.context = context;
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.view, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.text);
textView.setText(values.get(position));
Linkify.addLinks(textView,Linkify.WEB_URLS);
return rowView;
}
}