您的位置:首页 > 其它

Fragment 初学

2016-01-09 21:29 183 查看
需要实现下图功能,点击两个textview能改变下面的内容(这是fragment),并且点击加锁图片,会把该列添加到另一个fragment。





我用两个fragment replace实现的。所有的数据在activity中初始化。把两个fragment实例定义成activity的成员变量,

在初始化fragment后传入listview要显示的数据。每个fragment中点击事件都是调用activity中的方法,通知activity修改数据。

其中一个fragment代码如下(其实两个fragment代码很多类似,可以提取成一个):

public class ShowLockFragment extends Fragment {

private List<LockInfo> lockInfos;
private ApplockInerface applockipm;
private ListView lv_lock;
private MyAdpater adpater;
private TextView tv; 
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
//由activity初始化数据
public void setInfos(List<LockInfo> list){
lockInfos = list;
}

@Override
public void onAttach(Activity activity) {
System.out.println("LockFragment----- onAttach");
super.onAttach(activity);
try{  

//activity中实现的接口。
applockipm =(ApplockInerface)activity;  
     }catch(ClassCastException e){  
         throw new ClassCastException(activity.toString()+"must implement ApplockInerface");  
     }  

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
System.out.println("LockFragment----- onCreateView");
View view  = inflater.inflate(R.layout.fragment_applock, container, false) ;
tv = (TextView) view.findViewById(R.id.tv_applock);

lv_lock = (ListView) view.findViewById(R.id.lv_applock);
if(adpater ==null){
adpater = new MyAdpater();
}
lv_lock.setAdapter(adpater);
return view;
}

private class MyAdpater  extends BaseAdapter{

@Override
public int getCount() {
tv.setText("已加锁应用:"+lockInfos.size()+"个");
return lockInfos.size();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
LockViewHold hold ;
if(convertView ==null){
convertView = View.inflate(getActivity(), R.layout.item_applock, null);
hold = new LockViewHold();
hold.icon = (ImageView) convertView.findViewById(R.id.iv_appicon);
hold.tv_appname = (TextView) convertView.findViewById(R.id.tv_appname);
hold.actionicon = (ImageView) convertView.findViewById(R.id.iv_nolockicon);
convertView.setTag(hold);
}else{
hold = (LockViewHold) convertView.getTag();
}
final LockInfo info = lockInfos.get(position);
hold.icon.setImageDrawable(info.getIcon());
hold.tv_appname.setText(info.getAppName());
hold.actionicon.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
lockInfos.remove(info);

//告诉activity修改另外一个list的数据。
applockipm.deleteLock(info);
adpater.notifyDataSetChanged();
}
});
return convertView;
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}
}

}

activity代码如下:

public class AppLockActivity extends Activity implements
ApplockInerface{

private LinearLayout ll_container;
private LinearLayout ll_loading;
private TextView tv_shownolock;
private TextView tv_showlock;
private ShowLockFragment lockFragment;
private ShowNoLockFragment noLockFragment;
private FragmentManager fm;
private List<LockInfo> lockInfos;
private List<LockInfo> nolockInfos;
private PackageManager pm ;
private AppLockDao dao;
private boolean showLockFlag;

private Handler handler = new Handler(){
public void dispatchMessage(android.os.Message msg) {
ll_loading.setVisibility(View.INVISIBLE);
FragmentTransaction ftc =  fm.beginTransaction();

ftc.replace(R.id.ll_container, noLockFragment);

//初始化数据后,给两个fragment传入数据

noLockFragment.setnoInfos(nolockInfos);
lockFragment.setInfos(lockInfos);
ftc.commit();
};
}; 

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("AppLockActivity onStart");
setContentView(R.layout.activity_applock);
ll_container = (LinearLayout) findViewById(R.id.ll_container);
ll_loading = (LinearLayout) findViewById(R.id.ll_loading);
tv_showlock = (TextView) findViewById(R.id.tv_showlock);
tv_shownolock = (TextView) findViewById(R.id.tv_shownolock);
fm = getFragmentManager();
pm = getPackageManager();
dao = new AppLockDao(this);
noLockFragment = new ShowNoLockFragment();
lockFragment = new ShowLockFragment();
showLockFlag = false;
lockInfos = new ArrayList<LockInfo>();
nolockInfos = new ArrayList<LockInfo>();
initData();

}

private void initData() {
ll_loading.setVisibility(View.VISIBLE);
new Thread(){
public void run() {
List<PackageInfo> packinfos = pm.getInstalledPackages(0);
for(PackageInfo pinfo : packinfos){
String appname = pinfo.applicationInfo.loadLabel(pm).toString();
LockInfo info = new LockInfo();
if(dao.find(appname)){
info.setAppName(appname);
info.setIcon(pinfo.applicationInfo.loadIcon(pm));
info.setPackageName(pinfo.packageName);
lockInfos.add(info);
}else{
info.setAppName(appname);
info.setIcon(pinfo.applicationInfo.loadIcon(pm));
info.setPackageName(pinfo.packageName);
nolockInfos.add(info);
}
}
handler.sendEmptyMessage(0);
};
}.start(); 
}

/**
* 相应点击textview事件,显示未加锁程序
* @param view
*/
public void shownolock(View view) {
if(showLockFlag){
showLockFlag = false;
tv_shownolock.setBackgroundResource(R.drawable.tab_left_pressed);
tv_showlock.setBackgroundResource(R.drawable.tab_right_default);
FragmentTransaction ftc =  fm.beginTransaction();
ftc.replace(R.id.ll_container, noLockFragment);
ftc.commit();
}
}

/**
* 相应点击textview事件,显示加锁程序
* @param view
*/
public void showlock(View view) {
if(!showLockFlag){
showLockFlag = true;
tv_shownolock.setBackgroundResource(R.drawable.tab_left_default);
tv_showlock.setBackgroundResource(R.drawable.tab_right_pressed);
FragmentTransaction ftc =  fm.beginTransaction();
ftc.replace(R.id.ll_container, lockFragment);
ftc.commit();
}
}

//由fragment中调用,告诉activity更新要显示的数据。
@Override
public void addLock(LockInfo info) {
lockInfos.add(0, info);
dao.insert(info.getAppName());
}

//由fragment中调用,告诉activity更新要显示的数据。
@Override
public void deleteLock(LockInfo info) {
nolockInfos.add(0, info);
dao.delete(info.getAppName());
}
}

public interface ApplockInerface {

/**
* 告知activity 添加锁
* @param info app名称、app包名、appicon的封装类对象
*/
public void addLock(LockInfo info);

/**
* 告知activity 删除锁
* @param info app名称、app包名、appicon的封装类对象
*/
public void deleteLock(LockInfo info);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: