2013-07-10 117 views
0

的第一位置,顯示出應用程序名稱這是我的例子顯示系統安裝在gridview aplication名。但我想在gridvew之上顯示特定的應用程序名稱,我該怎麼辦?下面是我在我提供的,我只是想顯示對我做了什麼的gridview第一位置,這個應用程序 ((p.packageName).equals("com.qurankarim.urdu"))listview其名稱顯示所選應用程序的全部源代碼?請幫我如何在GridView控件

   public class Learning extends Activity implements OnItemClickListener { 

/* whether or not to include system apps */ 
private static final boolean INCLUDE_SYSTEM_APPS = false; 

private ListView mAppsList; 
private AppListAdapter mAdapter; 
private List<App> mApps; 
boolean isPressed = false; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.learning); 

    final ImageButton Searchbtn = (ImageButton) findViewById(R.id.poweron); 
    Searchbtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (isPressed) { 
       Searchbtn.setImageResource(R.drawable.power_off); 
       finish(); 
      } else { 
       Searchbtn.setImageResource(R.drawable.power_on); 
      } 
      isPressed = !isPressed; 

     } 
    }); 


    GridView mAppsList = (GridView) findViewById(R.id.appslist); 

    // mAppsList = (ListView) findViewById(R.id.appslist); 
    mAppsList.setOnItemClickListener(this); 

    mApps = loadInstalledApps(INCLUDE_SYSTEM_APPS); 

    mAdapter = new AppListAdapter(getApplicationContext()); 
    mAdapter.setListItems(mApps); 
    mAppsList.setAdapter(mAdapter); 

    new LoadIconsTask().execute(mApps.toArray(new App[] {})); 
} 

public void onItemClick(AdapterView<?> parent, View view, int position, 
     long id) { 

    final App app = (App) parent.getItemAtPosition(position); 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 

    String msg = ""; 
    builder.setMessage(msg) 
      .setCancelable(true) 
      .setTitle(app.getTitle()) 
      .setIcon(mAdapter.getIcons().get(app.getPackageName())) 
      .setPositiveButton("Launch", 
        new DialogInterface.OnClickListener() { 
         public void 
    onClick(DialogInterface dialog, int id) { 
          // start the app by 
    invoking its launch intent 
          Intent i = 
    getPackageManager() 

    .getLaunchIntentForPackage(
              app.getPackageName()); 
          try { 
           if (i != null) { 

    startActivity(i); 
           } else { 
            i = new 

    Intent(app.getPackageName()); 

    startActivity(i); 
           } 
          } catch 
    (ActivityNotFoundException err) { 

    Toast.makeText(Learning.this, 

    "Error launching app", 

    Toast.LENGTH_SHORT).show(); 
           } 
         } 
        }) 
      .setNegativeButton("Cancel", 
        new DialogInterface.OnClickListener() { 
         public void 
    onClick(DialogInterface dialog, int id) { 
          dialog.cancel(); 
         } 
        }); 
    AlertDialog dialog = builder.create(); 
    dialog.show(); 
} 


private List<App> loadInstalledApps(boolean includeSysApps) { 
    List<App> apps = new ArrayList<App>(); 


    PackageManager packageManager = getPackageManager(); 

    List<PackageInfo> packs = packageManager.getInstalledPackages(0); 

    for (int i = 0; i < packs.size(); i++) { 
     PackageInfo p = packs.get(i); 
     ApplicationInfo applicationInfo = p.applicationInfo; 

     if ( ((p.packageName).equals("com.qurankarim.urdu")) 
       || ((p.packageName) 
    .equals("appinventor.ai_hamada_yousef_o.MP3Quruan_2")) 
       || 
    ((p.packageName).equals("biz.binzrysolution.qibla")) 
       || ((p.packageName).equals("com.EaseApps.duasof")) 
       || ((p.packageName).equals("com.EaseApps.hajj")) 
       || ((p.packageName) 

    .equals("com.HatafSoft.sahihmuslim_eng_free")) 
       || 
    ((p.packageName).equals("com.aliftek.quran_urdu")) 
       || 
    ((p.packageName).equals("com.amirmemon.quizgame.quran")) 
       || 
((p.packageName).equals("com.baqa.quran.fehmulquran")) 
       || 
((p.packageName).equals("com.baqa.quran.tafheemulquran")) 
       || ((p.packageName) 

.equals("com.bitsmedia.android.muslimpro")) 
       || ((p.packageName).equals("com.chaks.duaas")) 
       || ((p.packageName).equals("com.chaks.quran")) 
       || 
((p.packageName).equals("com.guidedways.iQuran")) 
       || 
((p.packageName).equals("com.guidedways.iQuranPro")) 
       || 
((p.packageName).equals("com.hajjguide.se.android")) 
       || 
((p.packageName).equals("com.iroshni.asanquran")) 
       || ((p.packageName).equals("com.osama.maher")) 
       || ((p.packageName).equals("com.osama.sodesEn")) 
       || 
    ((p.packageName).equals("com.perfection.WWWislan")) 
       || 
    ((p.packageName).equals("com.quran.labs.androidquran")) 

       || 
    ((p.packageName).equals("com.triosLabs.SahihMuslim")) 
       || 
    ((p.packageName).equals("com.triosLabs.hadithreader")) 
       || ((p.packageName).equals("com.wAllahsWord")) 
       || ((p.packageName).equals("com.yallasoft.quran")) 
       || 
    ((p.packageName).equals("com.yaz.sahihMuslimOne")) 
       || 
    ((p.packageName).equals("com.zx.AlQuran_karim_Free")) 
       ||  
    ((p.packageName).equals("com.zx.Alquran_uthmanic_Free")) 
       || 
    ((p.packageName).equals("excelarz.apps.dhqReader")) 
       || 
    ((p.packageName).equals("io.vov.android.vitamio.demo")) 
       || ((p.packageName).equals("islam3d.liveWPcube")) 
       || ((p.packageName).equals("mydotdev.quranurdu")) 
       || ((p.packageName).equals("net.xbound.zakirnaik")) 
       || ((p.packageName).equals("q.and.u")) 
       || ((p.packageName).equals("sadaqa.app.deentv")) 
       || 
     ((p.packageName).equals("com.verypositive.Quran")) 

     ) { 


      App app = new App(); 
      app.setTitle(p.applicationInfo.loadLabel(packageManager) 
        .toString()); 
      app.setPackageName(p.packageName); 
      app.setVersionName(p.versionName); 
      app.setVersionCode(p.versionCode); 
      CharSequence description = p.applicationInfo 
        .loadDescription(packageManager); 
      app.setDescription(description != null ? 
    description.toString() 
        : ""); 
      apps.add(app); 
      // } 
     } 
    } 
    return apps; 
} 

/** 
* An asynchronous task to load the icons of the installed applications. 
*/ 
private class LoadIconsTask extends AsyncTask<App, Void, Void> { 
    @Override 
    protected Void doInBackground(App... apps) { 

     Map<String, Drawable> icons = new HashMap<String, Drawable>(); 
     PackageManager manager = getApplicationContext() 
       .getPackageManager(); 

     for (App app : apps) { 
      String pkgName = app.getPackageName(); 
      Drawable ico = null; 
      try { 
       Intent i = 
    manager.getLaunchIntentForPackage(pkgName); 
       if (i != null) { 
        ico = manager.getActivityIcon(i); 
       } 
      } catch (NameNotFoundException e) { 
       Log.e("ERROR", "Unable to find icon for package '" 
         + pkgName + "': " + 
    e.getMessage()); 
      } 
      icons.put(app.getPackageName(), ico); 
     } 
     mAdapter.setIcons(icons); 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     mAdapter.notifyDataSetChanged(); 
    } 
} 

} 





         public class AppListAdapter extends BaseAdapter { 

    private LayoutInflater mInflater; 

    private List<App> mApps; 
    /** a map which maps the package name of an app to its icon drawable */ 
    private Map<String, Drawable> mIcons; 
    private Drawable mStdImg; 

/** 
    * Constructor. 
* 
* @param context the application context which is needed for the layout inflater 
*/ 
public AppListAdapter(Context context) { 
    // cache the LayoutInflater to avoid asking for a new one each time 
    mInflater = LayoutInflater.from(context); 

    // set the default icon until the actual icon is loaded for an app 
    mStdImg = context.getResources().getDrawable(R.drawable.icon); 
} 

@Override 
    public int getCount() { 
    return mApps.size(); 
    } 

@Override 
    public Object getItem(int position) { 
    return mApps.get(position); 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

    AppViewHolder holder; 
    if(convertView == null) { 
    convertView = mInflater.inflate(R.layout.row, null); 

    // creates a ViewHolder and stores a reference to the children view we want to  
    bind data to 
    holder = new AppViewHolder(); 
    holder.mTitle = (TextView) convertView.findViewById(R.id.apptitle); 
    holder.mIcon = (ImageView) convertView.findViewById(R.id.appicon); 
    convertView.setTag(holder); 
    } else { 
    // reuse/overwrite the view passed assuming(!) that it is castable! 
    holder = (AppViewHolder) convertView.getTag(); 
    } 

    App app = mApps.get(position); 

    holder.setTitle(app.getTitle()); 
    if (mIcons == null || mIcons.get(app.getPackageName()) == null) { 
    holder.setIcon(mStdImg); 
    } else { 
    holder.setIcon(mIcons.get(app.getPackageName())); 
    } 

    return convertView; 
} 


public void setListItems(List<App> list) { 
    mApps = list; 
} 


public void setIcons(Map<String, Drawable> icons) { 
    this.mIcons = icons; 
} 

/** 
* Returns the map containing the icons for each displayed app. 
* 
* @return a map which contains a mapping of package names to icon drawable for all 
    displayed apps 
*/ 
    public Map<String, Drawable> getIcons() { 
    return mIcons; 
    } 

/** 
* A view holder which is used to re/use views inside a list. 
*/ 
    public class AppViewHolder { 

    private TextView mTitle; 
    private ImageView mIcon; 

    /** 
    * Sets the text to be shown as the app's title 
    * 
    * @param title the text to be shown inside the list row 
    */ 
    public void setTitle(String title) { 
    mTitle.setText(title); 
    } 

    /** 
    * Sets the icon to be shown next to the app's title 
    * 
    * @param img the icon drawable to be displayed 
    */ 
    public void setIcon(Drawable img) { 
    if (img != null) { 
     mIcon.setImageDrawable(img); 
    } 
    } 
    } 
    } 






       public class App { 

private String title; 
private String packageName; 
private String versionName; 
private int versionCode; 
private String description; 

// ordinary getters and setters 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

public String getPackageName() { 
    return packageName; 
} 

public void setPackageName(String packageName) { 
    this.packageName = packageName; 
} 

public String getVersionName() { 
    return versionName; 
} 

public void setVersionName(String versionName) { 
    this.versionName = versionName; 
} 

public int getVersionCode() { 
    return versionCode; 
} 

public void setVersionCode(int versionCode) { 
    this.versionCode = versionCode; 
} 

public String getDescription() { 
    return description; 
} 

public void setDescription(String description) { 
    this.description = description; 
} 

} 

回答

0

我認爲最簡單的解決方法是重新創建另一列表然後添加應用程序的其餘部分。你可以這樣做:

List<App> apps = new ArrayList<App>(); 
List<PackageInfo> packs = getPackageManager().getInstalledPackages(0); 

for(PackageInfo package : packs) { 
    String name = package.packageName; 
    if("com.baqa.quran.tafheemulquran".equals(name)) { // Add other "equals" here 
     App app = new App(); // Create your App […] 
     apps.add(app); 
     packs.remove(package); 
    } 
} 

for(PackageInfo package : packs) { 
    App app = new App(); // Create your App […] 
    apps.add(app); 
}