2014-06-22 1 views
2

내가 만드는 중입니다. 스크롤 가능한 탭이 있고 그 중 하나에서 다운로드 한 모든 응용 프로그램을 표시하려고합니다. ArrayAdapter를 확장하는 클래스에서 super 메서드를 해결할 수 없습니다.

나는

http://javatechig.com/android/how-to-get-list-of-installed-apps-in-android

내 응용 프로그램 클래스는 조각을 확장하는 조각을 사용하여이를 구현하기 위해 노력하고 있습니다. 이 클래스는 설치된 응용 프로그램을 초기화하고 나열하는 데 사용됩니다. PackageManage에서 응용 프로그램 세부 정보 목록을 가져 오는 것은 장기간에 걸친 작업입니다.

또한이 클래스는 ArrayAdapter를 확장하는 ApplicationAdapter 클래스를 사용합니다.

내 ApplicationAdapter 클래스에서이 오류가 발생했습니다.

enter image description here

나는 슈퍼가 해결 될 수없는 이유를 알아 내려고 노력하고 해결 방법을하는 방법입니다. 처음에 전화해야하지 않습니까?

package com.spicycurryman.getdisciplined10.app; 

import android.app.ProgressDialog; 
import android.content.ActivityNotFoundException; 
import android.content.Intent; 
import android.content.pm.ApplicationInfo; 
import android.content.pm.PackageManager; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListView; 
import android.widget.Toast; 

import com.javatechig.listapps.ApplicationAdapter; 

import java.util.ArrayList; 
import java.util.List; 


public class InstalledAppActivity extends Fragment { 
    private PackageManager packageManager = null; 
    private List<ApplicationInfo> applist = null; 
    private ApplicationAdapter listadaptor = null; 

    ListView InstalledAppList; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     packageManager = (PackageManager) getActivity().getPackageManager().getInstalledPackages(0); 
     new LoadApplications().execute(); 

     InstalledAppList.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       ApplicationInfo app = applist.get(i); 
       try { 
        Intent intent = packageManager 
          .getLaunchIntentForPackage(app.packageName); 

        if (null != intent) { 
         startActivity(intent); 
        } 
       } 

       catch (ActivityNotFoundException e) { 
        Toast.makeText(getActivity(),"",Toast.LENGTH_SHORT).show(); 

       } 
      } 



     }); 
     return inflater.inflate(R.layout.installed_apps, container, false); 

    } 


    private List<ApplicationInfo> checkForLaunchIntent(List<ApplicationInfo> list) { 
     ArrayList<ApplicationInfo> applist = new ArrayList<ApplicationInfo>(); 
     for (ApplicationInfo info : list) { 
      try { 
       if (null != packageManager.getLaunchIntentForPackage(info.packageName)) { 
        applist.add(info); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

     return applist; 
    } 

    private class LoadApplications extends AsyncTask<Void, Void, Void> { 
     private ProgressDialog progress = null; 

     @Override 
     protected Void doInBackground(Void... params) { 
      applist = checkForLaunchIntent(packageManager.getInstalledApplications(PackageManager.GET_META_DATA)); 
      listadaptor = new ApplicationAdapter(InstalledAppActivity.this, 
        R.layout.snippet_list_row, applist); 

      return null; 
     } 

     @Override 
     protected void onCancelled() { 
      super.onCancelled(); 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      //setListAdapter(listadaptor); 
      InstalledAppList.setAdapter(listadaptor); 
      super.onPostExecute(result); 
     } 



     @Override 
     protected void onProgressUpdate(Void... values) { 
      super.onProgressUpdate(values); 
     } 
    } 
} 

오류는 다음과 같습니다 :

그것이 여기 내 조각 클래스를 보여줄 수있는 사용 인 경우

package com.javatechig.listapps; 

import android.content.Context; 
import android.content.pm.ApplicationInfo; 
import android.content.pm.PackageManager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import com.spicycurryman.getdisciplined10.app.InstalledAppActivity; 
import com.spicycurryman.getdisciplined10.app.R; 

import java.util.List; 







public class ApplicationAdapter extends ArrayAdapter<ApplicationInfo> { 
    private List<ApplicationInfo> appsList = null; 
    private InstalledAppActivity context; 
    private PackageManager packageManager; 

      public ApplicationAdapter(InstalledAppActivity context, int textViewResourceId, 
              List<ApplicationInfo> appsList) { 
     super(context, textViewResourceId, appsList); 
     this.context = context; 
     this.appsList = appsList; 
     packageManager = context.getActivity().getPackageManager(); 
     } 

      @Override 
    public int getCount() { 
     return ((null != appsList) ? appsList.size() : 0); 
     } 

      @Override 
    public ApplicationInfo getItem(int position) { 
     return ((null != appsList) ? appsList.get(position) : null); 
     } 

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

      @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     if (null == view) { 
      LayoutInflater layoutInflater = (LayoutInflater) context.getActivity(). 
      getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = layoutInflater.inflate(R.layout.snippet_list_row, null); 
      } 

     ApplicationInfo data = appsList.get(position); 
     if (null != data) { 
      TextView appName = (TextView) view.findViewById(R.id.app_name); 
      TextView packageName = (TextView) view.findViewById(R.id.app_package); 
      ImageView iconview = (ImageView) view.findViewById(R.id.app_icon); 

      appName.setText(data.loadLabel(packageManager)); 
      packageName.setText(data.packageName); 
      iconview.setImageDrawable(data.loadIcon(packageManager)); 
      } 
     return view; 
     } 
}; 

: 여기

는 ApplicationAdapter 클래스 내 자바 코드

'super (com.spicycurryman.getdisciplined10.app.InstalledActivity, int, java. util.List '

+0

스크린 샷을 게시하는 대신 오류를 복사하여 붙여 넣으십시오. 이를 수행하는 가장 쉬운 방법은 Problems 뷰로 이동하는 것입니다. –

답변

2

InstalledActivityContext을 확장/구현하지 않으므로 ArrayAdapter 생성자 절에 적용되지 않습니다.

+0

보다 심각 할 수 있습니다. 이미 Fragment를 확장합니다. 컨텍스트가 어떻게 추가됩니까? –

+1

@XiJiaopin 프래그먼트의'getActivity()'메소드를 사용하십시오. –

+0

묻는 것에 대해 미안하지만 'Context'를 반환하는 getActivity() 메소드가'Fragment'에있는 경우 getActivity –

0

대개 상위 생성자에 전달하려는 매개 변수가 ArrayAdapter의 생성자와 일치하지 않습니다. 사용 가능한 생성자에 대한 설명서를 확인하십시오.

+0

일치해야한다고 생각합니다. http://developer.android.com/reference/android/widget/ArrayAdapter.html 오류가 단순히 –

관련 문제