<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
android:orientation="vertical" >
<com.example.irclient2.adapter.MyEditText
android:id="@+id/chatinput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:imeOptions="actionSend|flagNoExtractUi"
android:inputType="textCapSentences" />
<ListView
android:id="@+id/chatlist"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/chatinput"
android:background="@drawable/fundo_chat"
android:divider="@android:color/transparent"
android:dividerHeight="1.0sp"
android:padding="5dp"
android:scrollingCache="false"
android:smoothScrollbar="true" >
</ListView>
</RelativeLayout>package com.example.irclient2.fragment;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;
import com.example.irclient2.R;
import com.example.irclient2.activity.MainActivity;
import com.example.irclient2.adapter.Conversa;
import com.example.irclient2.adapter.MyEditText;
import com.example.irclient2.service.MyService;
public class ChatFragment extends Fragment implements OnItemClickListener,
OnItemLongClickListener, OnEditorActionListener {
private String target;
private ListView listview;
private MyEditText edittext;
private Conversa conversa;
private MainActivity activity;
private int listview_recover_position;
public static final String TAG_FRAGMENT_LIFECYCLE = "fraglifecycle";
public static final String LISTSTATE = "liststate";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
target = getArguments().getString(MyService.EXTRA_TARGET);
Log.i(TAG_FRAGMENT_LIFECYCLE, "onCreate() do ChatFragment " + target);
activity = (MainActivity) getActivity();
conversa = MyService.getConversa(target);
// esse target é passado com o mTag no contrutor do tablistener.
// no tablistener ele precisa ser igual definido na tab da activity, mas
// daqui pra baixo eh target
if (target.equalsIgnoreCase(MainActivity.TITLE_TAB_CHAT)) {
target = MyService.CANAL;
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.i(TAG_FRAGMENT_LIFECYCLE, "onCreateView() do ChatFragment "
+ target);
View view = inflater.inflate(R.layout.chat_layout, container, false);
listview = (ListView) view.findViewById(R.id.chatlist);
listview.setAdapter(conversa);
listview.setOnItemClickListener(this);
listview.setOnItemLongClickListener(this);
if (savedInstanceState != null) {
listview_recover_position = savedInstanceState
.getInt(LISTSTATE, -1);
}
edittext = (MyEditText) view.findViewById(R.id.chatinput);
edittext.setOnEditorActionListener(this);
// seta o nick do usuario como dica do edittext
setHint();
return view;
}
@Override
public void onResume() {
super.onResume();
if (listview_recover_position != -1) {
final int position = listview_recover_position;
Log.i(TAG_FRAGMENT_LIFECYCLE, "recuperando posição da lista: "
+ position);
listview.post(new Runnable() {
@Override
public void run() {
listview.setSelection(position);
}
});
listview_recover_position = -1;
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
if (!this.isVisible()) {
super.onSaveInstanceState(outState);
return;
}
// se a ultima posição nao esta visivel, salvamos a primeira visivel
// para recuperar
if (listview.getLastVisiblePosition() < (listview.getCount() - 1)) {
Log.i(TAG_FRAGMENT_LIFECYCLE, "salvando primeira posição visivel");
outState.putInt(LISTSTATE, listview.getFirstVisiblePosition());
}
super.onSaveInstanceState(outState);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if (target.equalsIgnoreCase(MyService.CANAL)) {
inflater.inflate(R.menu.canal_menu, menu);
} else {
inflater.inflate(R.menu.pvt_menu, menu);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_closepvt:
activity.removePVTTab(conversa.getTarget());
return true;
case R.id.menu_desconectar:
try {
activity.service.IRCdisconnect();
} catch (Exception e) {
Log.e("irc", "Erro ao acessar o service para desconectar");
}
return true;
case R.id.menu_mudarnick:
activity.trocarNickDialog("Insira seu novo nick.");
return true;
}
return false;
}
public void sendMessage(String target, String msg) {
try {
activity.service.sendMessage(target, msg);
} catch (Exception e) {
Log.e("irc", "Erro ao tentar enviar mensagem. para o service.");
Toast.makeText(
getActivity(),
"Não foi possível enviar a mensagem. Necessário uma reinicialização do aplicativo",
Toast.LENGTH_SHORT).show();
}
// APAGA O EDITTEXT
edittext.setText("");
}
public void setQuote(String nick) {
((MainActivity) getActivity()).drawerlayout.closeDrawers();
edittext.setText("");
edittext.append(nick + ": ");
}
public void setHint() {
edittext.setHint("<" + MyService.NICK + "> Digite aqui...");
}
@Override
public boolean onItemLongClick(AdapterView<?> adapter, View arg1, int pos,
long arg3) {
String nick = conversa.getLog().get(pos).getNick();
if (nick == null) {
return false;
}
try {
// verifica se ja existe adapter com o nick
if (MyService.getConversa(nick) == null) {
// se não, adiciona um novo pvt, enviando true pra selecionar a
// tab
// apos criar
activity.service.addPVTConversa(nick);
} else {
// se sim, apenas seleciona a tab
activity.selectTab(nick);
}
} catch (Exception e) {
Toast.makeText(
getActivity(),
"Não foi possível detectar se a conversa existe no service. Recomendável uma reinicialização do aplicativo.",
Toast.LENGTH_SHORT).show();
}
return true;
}
@Override
public void onItemClick(AdapterView<?> adapter, View arg1, int pos,
long arg3) {
String nick = conversa.getLog().get(pos).getNick();
if (nick != null) {
setQuote(nick);
}
}
@Override
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEND) {
sendMessage(target, edittext.getText().toString());
edittext.clearFocus();
// fecha o teclado
InputMethodManager imm = (InputMethodManager) activity
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edittext.getWindowToken(), 0);
// ALTERA O FLAG
return true;
}
return false;
}
}
Desde já, obrigado a todos.
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.






0 comentários:
Postar um comentário