您的位置:首页 > 其它

在Launcher3添加新的ListView,把应用添加到list中

2017-04-01 11:09 423 查看
1.编辑桌面list部件名称

    

DefaultLayoutParser.java

private static final String TAG_THIRD_WUYAZHOU = "thirdwuyazhou";

@Override
protected HashMap<String, TagParser> getLayoutElementsMap() {
HashMap<String, TagParser> parsers = new HashMap<String, TagParser>();
parsers.put(TAG_FAVORITE, new AppShortcutWithUriParser());
parsers.put(TAG_APPWIDGET, new AppWidgetParser());
parsers.put(TAG_SHORTCUT, new UriShortcutParser(mSourceRes));
parsers.put(TAG_RESOLVE, new ResolveParser());
parsers.put(TAG_FOLDER, new MyFolderParser());
parsers.put(TAG_PARTNER_FOLDER, new PartnerFolderParser());
//wuyazhou add begin
parsers.put(TAG_THIRD_WUYAZHOU, new ThirdFolderParserWuyazhou());
//wuyazhou add end
return parsers;
}
AutoInstallsLayout.java

protected HashMap<String, TagParser> getLayoutElementsMap() {
HashMap<String, TagParser> parsers = new HashMap<String, TagParser>();
parsers.put(TAG_APP_ICON, new AppShortcutParser());
parsers.put(TAG_AUTO_INSTALL, new AutoInstallParser());
parsers.put(TAG_FOLDER, new FolderParser());
parsers.put(TAG_APPWIDGET, new AppWidgetParser());
parsers.put(TAG_SHORTCUT, new ShortcutParser(mSourceRes));
//fangqing add begin
parsers.put(TAG_THIRD_WUYAZHOU, new ThirdFolderParserWuyazhou());
//fangqing add end
return parsers;
}
@Thunk class ThirdFolderParserWuyazhou implements TagParser {

@Override
public long parseAndAdd(XmlResourceParser parser) {
long id = mCallback.generateNewItemId();
final long container = Favorites.CONTAINER_THIRD;
final long screenId = Long.parseLong(getAttributeValue(parser, ATTR_SCREEN));
mValues.clear();
mValues.put(Favorites.CONTAINER, container);
mValues.put(Favorites.SCREEN, screenId);

mValues.put(Favorites.CELLX,
convertToDistanceFromEnd(getAttributeValue(parser, ATTR_X), mColumnCount));
mValues.put(Favorites.CELLY,
convertToDistanceFromEnd(getAttributeValue(parser, ATTR_Y), mRowCount));
mValues.put(Favorites._ID, id);
mValues.put(Favorites.SPANX, getAttributeValue(parser, ATTR_SPAN_X));
mValues.put(Favorites.SPANY, getAttributeValue(parser, ATTR_SPAN_Y));
mValues.put(Favorites.ITEM_TYPE, Favorites.ITEM_TYPE_THIRD_wuyazhou);

if (mCallback.insertAndCheck(mDb, mValues) < 0) {
return -1;
} else {
return id;
}
}
}
///
public static final int ITEM_TYPE_THIRD_wuyazhou = 7;
/////
LauncherModel.java
loadWorkspace(){
case LauncherSettings.Favorites.ITEM_TYPE_THIRD_wuyazhou:
Log.d("zhufucong","ITEM_TYPE_THIRD_wuyazhou 00");
info = new ShortcutInfo();
info.id = c.getLong(idIndex);
info.container = container;
info.screenId = c.getInt(screenIndex);
info.cellX = c.getInt(cellXIndex);
info.cellY = c.getInt(cellYIndex);
info.spanX = c.getInt(spanXIndex);
info.spanY = c.getInt(spanYIndex);
info.itemType = itemType;
sBgWorkspaceItems.add(info);
sBgItemsIdMap.put(info.id, info);
break;
}


2.在xml文件内添加相应的桌面list小部件

default_workspace_5*6.xml

<favorites xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3">

<thirdwuyazhou
launcher:screen="0"
launcher:screenType="0"
launcher:x="2"
launcher:y="0"
launcher:spanX="1"
launcher:spanY="4" />


</favorites>


3.创建list对应的列表类

ThirdApp.java

package com.android.launcher3;

import android.content.ComponentName;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.RelativeLayout;
import android.widget.ListView;
import android.widget.BaseAdapter;

import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.HashSet;
import android.util.Log;
import android.graphics.drawable.Drawable;
import android.widget.ImageView;
import android.widget.TextView;
import android.view.LayoutInflater;
import android.graphics.Bitmap;
import android.content.Intent;
import android.content.res.Configuration;
public class ThirdApp extends RelativeLayout{
private ListView mListView;
private ListViewAdapter mAdapter;
private Workspace mWorkspace;
private Launcher mLauncher;
private View mView;
private ArrayList<ListInfo> mListInfo;
private int mCountX;
private int mCountY;
public ThirdApp(Workspace workspace, Context context) {
this(workspace, context, null);
}

public ThirdApp(Workspace workspace, Context context, AttributeSet attrs) {
this(workspace, context, attrs, 0);
}

public ThirdApp(Workspace workspace, Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mLauncher = (Launcher) context;
mWorkspace = workspace;
LauncherAppState app = LauncherAppState.getInstance();
InvariantDeviceProfile profile = app.getInvariantDeviceProfile();
mCountX = profile.numColumns;
mCountY = profile.numRows;
initViews();
}
void initViews(){
mView = LayoutInflater.from(mLauncher).inflate(R.layout.third_app,
(ViewGroup) mWorkspace.getChildAt(mWorkspace.getCurrentPage()), false);
mListView = (ListView)mView.findViewById(R.id.list);
mListInfo= new ArrayList<ListInfo>();
mAdapter = new ListViewAdapter(mListInfo);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(new OnItemClickListener(){

@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
ListInfo listInfo = (ListInfo)mAdapter.getItem(position);
mLauncher.startActivity(listInfo.mIntent);
}

});
}
public void addItem(ShortcutInfo info){
String title = info.title.toString();
Intent intent = info.intent;
LauncherAppState app = LauncherAppState.getInstance();
Bitmap bp= info.getIcon(app.getIconCache());
int index = (int)info.screenId*mCountY*mCountX+info.cellY*mCountX+info.cellX;
ListInfo listInfo = new ListInfo(title, intent, bp, index);

Collections.sort(mListInfo, ITEM_POS_COMPARATOR);
mListInfo.add(listInfo);
mAdapter.notifyDataSetChanged();
}
public void removeItem(final HashSet<String> packageNames, final HashSet<ComponentName> components){
for(ListInfo info:mListInfo){
ComponentName cn = info.mIntent.getComponent();
if(cn != null &&components.contains(cn)){
mListInfo.remove(info);
mAdapter.notifyDataSetChanged();
}
}
for(ListInfo info:mListInfo){
ComponentName cn = info.mIntent.getComponent();
if(cn!=null){
String pckName = info.mIntent.getComponent().getPackageName();
if(pckName != null &&packageNames.contains(pckName)){
mListInfo.remove(info);
mAdapter.notifyDataSetChanged();
}
}
}
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
}
public View getView(){
return mView;
}
public class ListViewAdapter extends BaseAdapter{
ArrayList<ListInfo> mData;
public ListViewAdapter(ArrayList data){
mData = data;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mData.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mData.get(position);
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final int selectID= position;
ListItemView listItemView = null;
if(convertView ==null){
listItemView = new ListItemView();
convertView = LayoutInflater.from(mContext).inflate(R.layout.third_app_list_item, null);
listItemView.mImage =(ImageView) convertView.findViewById(R.id.third_app_icon);
listItemView.mText = (TextView)convertView.findViewById(R.id.third_app_title);
convertView.setTag(listItemView);
}else{
listItemView = (ListItemView) convertView.getTag();
}
listItemView.mImage.setImageBitmap((Bitmap)mData.get(position).mImage);
listItemView.mText.setText((String)mData.get(position).mTitle);
return convertView;
}
public final class ListItemView{
public ImageView mImage;
public TextView mText;
}

}
public class ListInfo {
int mIndex;
String mTitle;
Intent mIntent;
Bitmap mImage;
public ListInfo(String title, Intent intent, Bitmap image,int index){
mIndex = index;
mTitle = title;
mImage = image;
mIntent = intent;
}
}
public static final Comparator<ListInfo> ITEM_POS_COMPARATOR = new Comparator<ListInfo>() {

@Override
public int compare(ListInfo lhs, ListInfo rhs) {
if (lhs.mIndex != rhs.mIndex) {
return lhs.mIndex - rhs.mIndex;
}
return 0;
}
};
}


4.初始化时在桌面添加list部件以及向部件内添加应用

@Override
public void bindItems(final ArrayList<ItemInfo> shortcuts, final int start, final int end,
final boolean forceAnimateIcons) {

switch (item.itemType) {
case LauncherSettings.Favorites.ITEM_TYPE_THIRD_wuyazhou:
//                 view =  mInflater.inflate(R.layout.third_app,
//                       (ViewGroup) mWorkspace.getChildAt(mWorkspace.getCurrentPage()), false);

mThirdAppwuyazhou = new ThirdApp(mWorkspace, this);
Log.d("zhufucong","ITEM_TYPE_THIRD_wuyazhou");
view = mThirdAppwuyazhou.getView();
view.setTag(item);
break;

                 default:
throw new RuntimeException("Invalid Item Type");
}
//fangqing add begin
if( view== null) continue;

workspace.addInScreenFromBind(view, item.container, item.screenId, item.cellX,
item.cellY, item.spanX, item.spanY);
//fangqing add end

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