2 jzk15666378163 jzk15666378163 于 2016.05.12 09:09 提问

把一个activity改成Fragment,遇到了错误,求大神指导!!

public void finish() {
// TODO Auto-generated method stub
super.finish();
queue.removeLast();
}
其中的finish有错误,求大神指点

3个回答

shenshucong520
shenshucong520   2016.05.12 09:12

fragment有finish方法吗,你估计想调用getActivity().finish()吧

shenshucong520
shenshucong520 回复jzk15666378163: 你想做什么吗?想销毁activity?销毁activity就直接使用getactivity.finish啊
大约 2 年之前 回复
jzk15666378163
jzk15666378163 是的,那怎么改呢,求指点
大约 2 年之前 回复
GHSYue
GHSYue   2016.05.12 11:21

粘个完整的代码出来,,,

jzk15666378163
jzk15666378163   2016.05.12 22:32

package com.example.fragmentdemo;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Queue;

import org.apache.http.conn.util.InetAddressUtils;

import com.example.fragmentdemo.R;
import com.transport.UserExpandableListAdapter;
import com.transport.ChatMessage;
import com.transport.User;
import com.transport.IpMessageConst;

import android.app.Fragment;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ExpandableListView;
import android.widget.TextView;
import android.widget.Toast;

public class ContactsFragment extends Fragment implements OnClickListener {

public static String hostIp;

private ExpandableListView userList;

private UserExpandableListAdapter adapter;
private List<String> strGroups; //所有一级菜单名称集合
private List<List<User>> children;

private TextView totalUser;
private Button refreshButton;
private TextView ipTextView;;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View contactsLayout = inflater.inflate(R.layout.contacts_layout,
            container, false);

// return contactsLayout;

if(!isWifiActive()){    //若wifi没有打开,提示
    Toast.makeText(getActivity(), R.string.no_wifi, Toast.LENGTH_LONG).show();
}


findViews();

strGroups = new ArrayList<String>(); //所有一级菜单名称集合
children = new ArrayList<List<User>>();

// netThreadHelper = NetThreadHelper.newInstance();
BaseFragment.netThreadHelper.connectSocket(); //开始监听数据
BaseFragment.netThreadHelper.noticeOnline(); //广播上线

adapter = new UserExpandableListAdapter(getActivity(), strGroups, children);
userList.setAdapter(adapter);

refreshButton.setOnClickListener(this);
refreshViews();
return contactsLayout;

}

@Override
public void finish() {
// TODO Auto-generated method stub
super.finish();
BaseFragment.netThreadHelper.noticeOffline(); //通知下线
BaseFragment.netThreadHelper.disconnectSocket(); //停止监听

}

public void onViewCreated(View view, Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onViewCreated(view, savedInstanceState);
totalUser =(TextView)view.findViewById(R.id.totalUser);
userList = (ExpandableListView)view.findViewById(R.id.userlist);
refreshButton = (Button) view.findViewById(R.id.refresh);
ipTextView = (TextView) view.findViewById(R.id.mymood);
hostIp = getLocalIpAddress();
ipTextView.setText(hostIp); //设置IP
}

@Override
public void processMessage(Message msg) {
// TODO Auto-generated method stub
switch(msg.what){
case IpMessageConst.IPMSG_BR_ENTRY:
case IpMessageConst.IPMSG_BR_EXIT:
case IpMessageConst.IPMSG_ANSENTRY:
case IpMessageConst.IPMSG_SENDMSG:
refreshViews();
break;
}
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK)
exit();
return true;
}

//更新数据和UI显示
private void refreshViews(){

//清空数据
strGroups.clear();
children.clear();

Map<String,User> currentUsers = new HashMap<String, User>();
currentUsers.putAll(BaseFragment.netThreadHelper.getUsers());
Queue<ChatMessage> msgQueue = BaseFragment.netThreadHelper.getReceiveMsgQueue();
Map<String, Integer> ip2Msg = new HashMap<String, Integer>();   //IP地址与未收消息个数的map
//遍历消息队列,填充ip2Msg
Iterator<ChatMessage> it = msgQueue.iterator();
while(it.hasNext()){
    ChatMessage chatMsg = it.next();
    String ip = chatMsg.getSenderIp();  //得到消息发送者IP
    Integer tempInt = ip2Msg.get(ip);
    if(tempInt == null){    //若map中没有IP对应的消息个数,则把IP添加进去,值为1
        ip2Msg.put(ip, 1);
    }else{  //若已经有对应ip,则将其值加一
        ip2Msg.put(ip, ip2Msg.get(ip)+1);
    }
}

//遍历currentUsers,更新strGroups和children
Iterator<String> iterator = currentUsers.keySet().iterator();
while (iterator.hasNext()) {
    User user = currentUsers.get(iterator.next());  
    //设置每个在线用户对应的未收消息个数
    if(ip2Msg.get(user.getIp()) == null){
        user.setMsgCount(0);
    }else{
        user.setMsgCount(ip2Msg.get(user.getIp()));
    }

    String groupName = user.getGroupName();
    int index = strGroups.indexOf(groupName);
    if(index == -1){ //没有相应分组,则添加分组,并添加对应child
        strGroups.add(groupName);

// List> childData = new ArrayList>();
// Map child = new HashMap();
// child.put("userName", user.getUserName());
// childData.add(child);
// children.add(childData);

        List<User> childData = new ArrayList<User>();
        childData.add(user);
        children.add(childData);
    }else{  //已存在分组,则将对应child添加到相对应分组中

// Map child = new HashMap();
// child.put("userName", user.getUserName());
// children.get(index).add(child);
children.get(index).add(user);
}

}

//更新groups

// for(int i = 0; i < strGroups.size(); i++){
// Map groupMap = new HashMap();
// groupMap.put("group", strGroups.get(i));
// groups.add(groupMap);
// }

adapter.notifyDataSetChanged(); //更新ExpandableListView

String countStr = "当前在线" + currentUsers.size() +"个用户";
totalUser.setText(countStr);    //更新TextView

}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.equals(refreshButton)){ //若是刷新
BaseFragment.netThreadHelper.refreshUsers();
refreshViews();
}

}

//判断wifi是否打开
public boolean isWifiActive(){
ConnectivityManager mConnectivity = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if(mConnectivity != null){
NetworkInfo[] infos = mConnectivity.getAllNetworkInfo();

    if(infos != null){
        for(NetworkInfo ni: infos){
            if("WIFI".equals(ni.getTypeName()) && ni.isConnected())
                return true;
        }
    }
}

return false;

}

//得到本机IP地址
public String getLocalIpAddress(){
try{
Enumeration en = NetworkInterface.getNetworkInterfaces();
while(en.hasMoreElements()){
NetworkInterface nif = en.nextElement();
Enumeration enumIpAddr = nif.getInetAddresses();
while(enumIpAddr.hasMoreElements()){
InetAddress mInetAddress = enumIpAddr.nextElement();
if(!mInetAddress.isLoopbackAddress() && InetAddressUtils.isIPv4Address(mInetAddress.getHostAddress())){
return mInetAddress.getHostAddress().toString();
}
}
}
}catch(SocketException ex){
Log.e("MyFeiGeActivity", "获取本地IP地址失败");
}

return null;

}

//获取本机MAC地址
public String getLocalMacAddress(){
WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
return info.getMacAddress();
}

}
这是完整的代码,求指点!!!!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android简单的将Activity改为Fragment
从Activity到Fragment最大的变动在于,在Fragment里面的onCreate()函数内,是没有办法使用findViewById、setContentView这些函数的。因为Fragment本身并没有提供这些方法。于是我们只能通过onCreateView和onViewCreated来实现对显示的控制。
让activity的逻辑业务快速切换到fragment
最近,公司有这个一个改动,需要将写好的5个activity封装成5个fragment并放在同一个activity上,如果在平时或许很简单,但是,这5个activity每一个都有不少于1000行的代码量,处理起来相当麻烦,因此,为避免重蹈覆辙,想到了一种比较好的解决方案。 activity写10个控件。 一般情况是这样做的: package com.test.acttofrag; i
解决 "GStreamer 遇到了常规流错误"问题
 1 、在终端输入:sudo apt-get remove totem-gstreamer2 、在终端输入:sudo apt-get install totem-xine totem-mozilla totem3、安装win32Codecs(已安装过的略过这一步)。win32Codecs的下载地址(下载完成后双击就可以安装):http://www.debian-multim
Android 继承FragmentActivity报错
Solution: Ok so when you extending the FragmentActivity for your application with the version of 2.2 or any lower version which did not support the Fragment for that. You can download the android.s
大写字符移位_腾讯实习编程题
题目:小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。 你能帮帮小Q吗? 输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述: 对于每组数据,输出移位后的字符串。 输入例子: AkleBiCeilD 输出例
腾讯2017年实习生编程题目(第二题)----2.算法基础-字符移位 小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。
腾讯2017年实习生编程题目(第二题) 2.算法基础-字符移位 小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。 你能帮帮小Q吗?   输入描述:   输入数据有多组,每组包含一个字符串s,且保证:1      输出描述:   对于每组数据,输出移位后的字符串。   输入例子: AkleBiCeilD   输出例子: kleieilABC
mac下安装安装包,遇到“安装器遇到了一个错误,导致安装失败”
今天安装jdk的时候遇到的,之前安装node的时候也不行,我还以为是包的问题,用另外一种方法安上了,但是jdk没找到别的,研究了半天……最后发现,我的/private/tmp目录没了……有可能是什么时候被误删的吧?然后重新mkdir一个就能装上了……
腾讯 2017 暑假实习生编程题(二):小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。 你能帮帮小Q吗?
题目链接:腾讯 2017 暑假实习生编程题(二)由《剑指 offer》面试题 4:替换空格,想到的技巧。此处运用了一个小小的技巧:从后往前将大写字符依次插入数组尾部,时间复杂度 O(n) 。import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import jav
为什么 JakeWharton 建议:App 只要用到一个 Activity ?
安卓开发大神级人物 JakeWharton 前不久在接受采访时提出一个颇具争议而又没有给出原因的建议:一个 App 只需要一个 Activity ,你可以使用 Fragments,只是别用 Fragments 回退栈。
转换activiy为fragment
Android User Interface Design: Working With Fragments Shane Conder & Lauren Darcey on Mar 21st 2011 with 23 comments Tutorial Details Technology: Eclipse + Android SDKDifficulty: Interme