Android 프로젝트가 컴파일되지만 올바르게 실행되지 않습니다.

와플 123

이것은 내가 가지고있는 주요 활동 파일입니다.

package de.project.packagelist;

import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

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

import de.project.packagelist.models.Pkg;

public class MainActivity extends AppCompatActivity {

    public static MainActivity instance;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        instance = this;
        setContentView(R.layout.activity_main);

        populatePackages();
    }

    public void onPackageUninstalled(String pkgName) {
        Toast.makeText(this, pkgName + " is uninstalled", Toast.LENGTH_SHORT).show();
        populatePackages();
    }

    public void onPackageInstalled(String pkgName) {
        Toast.makeText(this, pkgName + " is installed", Toast.LENGTH_SHORT).show();
        populatePackages();
    }

    public void onPackageChanged(String pkgName) {
        Toast.makeText(this, pkgName + " is changed", Toast.LENGTH_SHORT).show();
        populatePackages();
    }

    public void populatePackages() {
        ArrayList<Pkg> pkgList = new ArrayList<>();
        PackageListAdapter packageListAdapter = new PackageListAdapter(this, pkgList);
        ListView listView = (ListView) findViewById(R.id.package_list);
        listView.setAdapter(packageListAdapter);
        pkgList.clear();
        PackageManager pm = getPackageManager();
        List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_META_DATA);

        for (PackageInfo packageInfo : packages) {
            pkgList.add(new Pkg(packageInfo.packageName, packageInfo.packageName, packageInfo.versionName, packageInfo.versionCode));
        }
    }

    class PackageListAdapter extends ArrayAdapter<Pkg> {

        public PackageListAdapter(Context context, List<Pkg> packages) {
            super(context, R.layout.list_item_package, packages);
        }

        @NonNull
        @Override
        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            View v = convertView;

            if (v == null) {
                LayoutInflater vi;
                vi = LayoutInflater.from(getContext());
                v = vi.inflate(R.layout.list_item_package, null);
            }
            final Pkg p = getItem(position);
            if (p != null) {
                TextView tt1 = (TextView)v.findViewById(R.id.pkg_label);
                tt1.setText(p.getLabel());
                TextView tt2 = (TextView)v.findViewById(R.id.pkg_name);
                tt2.setText(p.getName());
                TextView tt3 = (TextView)v.findViewById(R.id.pkg_version);
                tt3.setText(p.getVersionName());
                Button btn1 = (Button)v.findViewById(R.id.pkg_uninstall);
                btn1.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(getApplicationContext(), "Uninstalling package: " + p.getName(), Toast.LENGTH_SHORT).show();
                    }
                });

                Button btn2 = (Button)v.findViewById(R.id.pkg_launch);
                btn2.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(getApplicationContext(), "Launching package: " + p.getName(), Toast.LENGTH_SHORT).show();
                    }
                });

                ImageView imageView = (ImageView)v.findViewById(R.id.pkg_icon);
//                imageView.setImageDrawable(p.get);

            }

            return v;
        }
    }

}

그리고 이것은 수신자의 코드입니다.

import android.net.Uri;

import de.project.packagelist.MainActivity;


public class PackageChangedBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //triggered whenever any change happens to any package
        //should inform activity
        Uri data = intent.getData();
        String pkgName = data.toString().substring(data.getScheme().length() + 1); //remove 'package:'
        if(MainActivity.instance != null) {
            if(intent.getAction() == "android.intent.action.PACKAGE_ADDED") {
                MainActivity.instance.onPackageInstalled(pkgName);
            } else if(intent.getAction() == "android.intent.action.PACKAGE_REMOVED") {
                MainActivity.instance.onPackageUninstalled(pkgName);
            } else if(intent.getAction() == "android.intent.action.PACKAGE_CHANGED") {
                MainActivity.instance.onPackageChanged(pkgName);
            }
        }
    }
}

내 코드는 오류없이 컴파일되지만 실행하면 시작하는 데 너무 오래 걸리고 버튼이 응답하지 않습니다. 내가 이전 버전과 라이브러리를 사용하고 있다는 것을 알고 있지만 내 코드에서 개선 할 수있는 것이 무엇인지 보십니까? 내 XML 파일 (매니페스트 및 레이아웃에서 시작 아이콘과 패키지를 시작하는 두 개의 버튼이 있고 다른 하나는 제거하는 것입니다.

내가 도대체 ​​뭘 잘못하고있는 겁니까?

mrtcnkryln

populatePackages기능 을 바꿔야한다고 생각합니다 . 어댑터를 만들고 각 brodcast 프로세스에서 목록보기를 반복해서 설정합니다.

다음과 같은 기능을 만들어야한다고 생각합니다. initAdapter

InitAdapter 기능 :

public void initAdapter(){
  //not set list here and PackageListAdapter define as global
  packageListAdapter = new PackageListAdapter(this);
  ListView listView = (ListView) findViewById(R.id.package_list);
  listView.setAdapter(packageListAdapter);
}

어댑터 클래스의 생성자를 변경하고 setItems 함수를 만듭니다.

public PackageListAdapter(Context context) {
            super(context, R.layout.list_item_package);
        }
public setItems(List<Pkg> packages) {
  this.packages = packages
}

그리고 당신의 populatePackages 함수에서 :

public void populatePackages() {
        ArrayList<Pkg> pkgList = new ArrayList<>();
        PackageManager pm = getPackageManager();
        List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_META_DATA);

        for (PackageInfo packageInfo : packages) {
            pkgList.add(new Pkg(packageInfo.packageName, packageInfo.packageName, packageInfo.versionName, packageInfo.versionCode));
        }
        packageListAdapter.setItems(pkgList); 
    }

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Mergesort가 올바르게 정렬되지 않습니다

분류에서Dev

@EnvironmentObject가 올바르게 생성되지 않았습니다.

분류에서Dev

Android Studio는 프로젝트를 올바르게 컴파일하고 Gradlew는 데이터 바인딩을 사용하지 않습니다.

분류에서Dev

R에서 루프가 올바르게 실행되지 않습니까?

분류에서Dev

cmake가 Bamboo 스크립트에서 올바르게 실행되지 않습니다.

분류에서Dev

typescript가 commonjs / es2015로 올바르게 컴파일되지 않음

분류에서Dev

typescript가 commonjs / es2015로 올바르게 컴파일되지 않음

분류에서Dev

Mockito Predicate JPA가 올바르게 실행되지 않음

분류에서Dev

동일한 android cmake git 프로젝트는 하나의 Ubuntu 시스템에서 잘 컴파일되지만 전체 프로젝트가 동일하더라도 다른 Ubuntu 시스템에서는 컴파일되지 않습니다.

분류에서Dev

document.ready ()에서 JQuery가 올바르게 실행되지 않습니다.

분류에서Dev

Else If가 PHP에서 올바르게 실행되지 않음

분류에서Dev

Unity Coin Collection 스크립트가 올바르게 컴파일되지 않습니다.

분류에서Dev

코드가 올바르게 읽히는 것 같지만 실행되지 않습니다.

분류에서Dev

bootstrap-datetimepicker가 올바르게 실행되지 않음

분류에서Dev

Rails 자산 경로가 올바르게 컴파일되지 않습니다.

분류에서Dev

GDB는 RAM에서 올바르게 실행되는 프로그램을 분해하지 않습니다.

분류에서Dev

파일 업로드 스크립트가 올바르게 실행되지만 파일이 디렉토리에 없습니다.

분류에서Dev

AsyncTask가 Android에서 올바르게 다시 시작되지 않습니다.

분류에서Dev

AsyncTask가 Android에서 올바르게 다시 시작되지 않습니다.

분류에서Dev

ImageView가 올바르게로드되지 않습니다.

분류에서Dev

ImageView가 올바르게로드되지 않습니다.

분류에서Dev

GuestAdditions가 올바르게 설치 (6.0.2)되는 것 같지만 실행되지 않습니다.

분류에서Dev

Android Studio에서 프로젝트가 실행되지 않음

분류에서Dev

지도가 올바르게 적용되지 않았습니다.

분류에서Dev

Android : ImageView.setImageResource가 gridviewadapter에서 올바르게 표시되지 않습니다.

분류에서Dev

Android-studio 프로젝트가 실행되지 않음

분류에서Dev

xcopy가있는 배치 파일은 cmd에서 올바르게 호출되지만 두 번 클릭하면 실행되지 않습니다.

분류에서Dev

Android tabLayout 마지막으로 선택한 탭 색상이 올바르게 업데이트되지 않습니다.

분류에서Dev

React-Native : 코드가 올바르게 컴파일되지만 화면이 비어 있습니다.

Related 관련 기사

  1. 1

    Mergesort가 올바르게 정렬되지 않습니다

  2. 2

    @EnvironmentObject가 올바르게 생성되지 않았습니다.

  3. 3

    Android Studio는 프로젝트를 올바르게 컴파일하고 Gradlew는 데이터 바인딩을 사용하지 않습니다.

  4. 4

    R에서 루프가 올바르게 실행되지 않습니까?

  5. 5

    cmake가 Bamboo 스크립트에서 올바르게 실행되지 않습니다.

  6. 6

    typescript가 commonjs / es2015로 올바르게 컴파일되지 않음

  7. 7

    typescript가 commonjs / es2015로 올바르게 컴파일되지 않음

  8. 8

    Mockito Predicate JPA가 올바르게 실행되지 않음

  9. 9

    동일한 android cmake git 프로젝트는 하나의 Ubuntu 시스템에서 잘 컴파일되지만 전체 프로젝트가 동일하더라도 다른 Ubuntu 시스템에서는 컴파일되지 않습니다.

  10. 10

    document.ready ()에서 JQuery가 올바르게 실행되지 않습니다.

  11. 11

    Else If가 PHP에서 올바르게 실행되지 않음

  12. 12

    Unity Coin Collection 스크립트가 올바르게 컴파일되지 않습니다.

  13. 13

    코드가 올바르게 읽히는 것 같지만 실행되지 않습니다.

  14. 14

    bootstrap-datetimepicker가 올바르게 실행되지 않음

  15. 15

    Rails 자산 경로가 올바르게 컴파일되지 않습니다.

  16. 16

    GDB는 RAM에서 올바르게 실행되는 프로그램을 분해하지 않습니다.

  17. 17

    파일 업로드 스크립트가 올바르게 실행되지만 파일이 디렉토리에 없습니다.

  18. 18

    AsyncTask가 Android에서 올바르게 다시 시작되지 않습니다.

  19. 19

    AsyncTask가 Android에서 올바르게 다시 시작되지 않습니다.

  20. 20

    ImageView가 올바르게로드되지 않습니다.

  21. 21

    ImageView가 올바르게로드되지 않습니다.

  22. 22

    GuestAdditions가 올바르게 설치 (6.0.2)되는 것 같지만 실행되지 않습니다.

  23. 23

    Android Studio에서 프로젝트가 실행되지 않음

  24. 24

    지도가 올바르게 적용되지 않았습니다.

  25. 25

    Android : ImageView.setImageResource가 gridviewadapter에서 올바르게 표시되지 않습니다.

  26. 26

    Android-studio 프로젝트가 실행되지 않음

  27. 27

    xcopy가있는 배치 파일은 cmd에서 올바르게 호출되지만 두 번 클릭하면 실행되지 않습니다.

  28. 28

    Android tabLayout 마지막으로 선택한 탭 색상이 올바르게 업데이트되지 않습니다.

  29. 29

    React-Native : 코드가 올바르게 컴파일되지만 화면이 비어 있습니다.

뜨겁다태그

보관