【发布时间】:2019-12-30 10:34:41
【问题描述】:
我一直在关注 this guide 的 RecyclerView 并尝试将它用于我的特定用例,但是当应用程序运行时 RecyclerView 是空的。
我是 Java 和 Android 开发的新手,所以我只是在测试一些东西以试图掌握一些东西。 在这种特殊情况下,我只是试图列出已安装的软件包,其中软件包名称以特定字符串开头,例如“com.google”应该匹配“com.google.camera”。
我的主要活动如下所示:
public class MainActivity extends AppCompatActivity {
ArrayList<PackageInfo> packages = new ArrayList<PackageInfo>();
PackageManager pm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView lstPackages = (RecyclerView) findViewById(R.id.lstInstalledPackages);
pm = getPackageManager();
List<PackageInfo> allPackages = pm.getInstalledPackages(PackageManager.GET_META_DATA);
for(PackageInfo pkg : allPackages) {
if(pkg.packageName.startsWith("com.google")){
packages.add(pkg);
Log.d("PKG", "Package found: " + pkg.packageName);
}
}
PackageItemAdapter adapter = new PackageItemAdapter(packages);
lstPackages.setAdapter(adapter);
lstPackages.setLayoutManager(new LinearLayoutManager(this));
adapter.notifyDataSetChanged();
}
}
包裹项目:
public class PackageItem {
private PackageInfo mPackageInfo;
public PackageItem(PackageInfo packageInfo) {
mPackageInfo = packageInfo;
}
public String getName() {
return mPackageInfo.applicationInfo.name;
}
public String getPackageId() {
return mPackageInfo.packageName;
}
public String getVersion() {
return mPackageInfo.versionName;
}
}
PackageItemAdapter:
public class PackageItemAdapter extends RecyclerView.Adapter<PackageItemAdapter.ViewHolder> {
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView packageName;
public ViewHolder(View viewItem) {
super(viewItem);
packageName = (TextView)viewItem.findViewById(R.id.txtPackageName);
}
}
private List<PackageItem> mPackages;
public PackageItemAdapter(List<PackageInfo> packages) {
ArrayList<PackageItem> pis = new ArrayList<PackageItem>();
for(PackageInfo pkg : packages) {
pis.add(new PackageItem(pkg));
}
mPackages = pis;
}
@Override
public PackageItemAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View packageView = inflater.inflate(R.layout.packageitem, parent, false);
ViewHolder viewHolder = new ViewHolder(packageView);
return viewHolder;
}
@Override
public void onBindViewHolder(PackageItemAdapter.ViewHolder viewHolder, int position) {
PackageItem packageItem = mPackages.get(position);
TextView tv = viewHolder.packageName;
tv.setText(packageItem.getName());
}
@Override
public int getItemCount() {
return mPackages.size();
}
}
packageitem.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/txtPackageName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
你能看到我遗漏的任何东西吗,或者有什么怪癖或我必须考虑的东西才能让它工作,还是我完全不知道?
【问题讨论】:
-
我正在为您创建演示并复制了整个代码,它工作正常并给了我列表。
标签: java android android-recyclerview