Replace apps filter ListView with RecycleView

This commit is contained in:
emanuele-f 2019-10-25 00:12:00 +02:00
parent b9d093d520
commit 4b67d2b856
3 changed files with 51 additions and 50 deletions

View File

@ -23,61 +23,58 @@ import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class AppAdapter extends BaseAdapter {
public class AppAdapter extends RecyclerView.Adapter<AppAdapter.AppViewHolder> {
private LayoutInflater layoutInflater;
private List<AppDescriptor> listStorage;
private View.OnClickListener mListener;
AppAdapter(Context context, List<AppDescriptor> customizedListView) {
layoutInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
AppAdapter(Context context, List<AppDescriptor> customizedListView, final View.OnClickListener listener) {
layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
listStorage = customizedListView;
mListener = listener;
}
@NonNull
@Override
public AppAdapter.AppViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.installed_app_list, parent, false);
AppViewHolder recyclerViewHolder = new AppViewHolder(view);
view.setOnClickListener(mListener);
return(recyclerViewHolder);
}
@Override
public int getCount() {
public void onBindViewHolder(@NonNull AppViewHolder holder, int position) {
holder.textInListView.setText(listStorage.get(position).getName());
holder.imageInListView.setImageDrawable(listStorage.get(position).getIcon());
holder.packageInListView.setText(listStorage.get(position).getPackages());
}
@Override
public int getItemCount() {
return listStorage.size();
}
@Override
public Object getItem(int position) {
return listStorage.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder listViewHolder;
if(convertView == null){
listViewHolder = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.installed_app_list, parent, false);
listViewHolder.textInListView = convertView.findViewById(R.id.list_app_name);
listViewHolder.imageInListView = convertView.findViewById(R.id.app_icon);
listViewHolder.packageInListView= convertView.findViewById(R.id.app_package);
convertView.setTag(listViewHolder);
}else{
listViewHolder = (ViewHolder)convertView.getTag();
}
listViewHolder.textInListView.setText(listStorage.get(position).getName());
listViewHolder.imageInListView.setImageDrawable(listStorage.get(position).getIcon());
listViewHolder.packageInListView.setText(listStorage.get(position).getPackages());
return convertView;
}
class ViewHolder{
public static class AppViewHolder extends RecyclerView.ViewHolder {
TextView textInListView;
ImageView imageInListView;
TextView packageInListView;
public AppViewHolder(View view) {
super(view);
textInListView = view.findViewById(R.id.list_app_name);
imageInListView = view.findViewById(R.id.app_icon);
packageInListView= view.findViewById(R.id.app_package);
}
}
}

View File

@ -2,15 +2,16 @@ package com.emanuelef.remote_capture;
import android.content.Context;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
// TODO add searchbar
// https://stackoverflow.com/questions/31085086/how-to-implement-floating-searchwidget-android
class AppsView extends ListView {
class AppsView extends RecyclerView {
List<AppDescriptor> mInstalledApps;
public interface OnSelectedAppListener {
@ -21,18 +22,20 @@ class AppsView extends ListView {
super(context);
mInstalledApps = installedApps;
AppAdapter installedAppAdapter = new AppAdapter(getContext(), mInstalledApps);
setAdapter(installedAppAdapter);
setLayoutManager(new LinearLayoutManager(context));
setHasFixedSize(true);
}
public void setSelectedAppListener(final OnSelectedAppListener listener) {
setOnItemClickListener(new AdapterView.OnItemClickListener() {
AppAdapter installedAppAdapter = new AppAdapter(getContext(), mInstalledApps, new OnClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
AppDescriptor app = ((AppDescriptor) getAdapter().getItem(i));
public void onClick(View view) {
int itemPosition = getChildLayoutPosition(view);
AppDescriptor app = mInstalledApps.get(itemPosition);
listener.onSelectedApp(app);
}
});
setAdapter(installedAppAdapter);
}
}

View File

@ -160,19 +160,20 @@ public class MainActivity extends AppCompatActivity implements LoaderManager.Loa
return;
}
mOpenAppsWhenDone = false;
AppsView apps = new AppsView(this, mInstalledApps);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.app_filter);
builder.setView(apps);
mOpenAppsWhenDone = false;
final AlertDialog alert = builder.create();
apps.setSelectedAppListener(new AppsView.OnSelectedAppListener() {
@Override
public void onSelectedApp(AppDescriptor app) {
mFilterUid = app.getUid();
mMenu.getItem(0).setIcon(app.getIcon());
// clone the drawable to avoid a "zoom-in" effect when clicked
mMenu.getItem(0).setIcon(app.getIcon().getConstantState().newDrawable());
// dismiss the dialog
alert.cancel();