Es ist meine AdapterklasseWie Layout Kind Blick in Recycler Blick in Runtime
public class AlbumAdapterDemo extends RecyclerView.Adapter<AlbumAdapterDemo.ViewHolder> {
private Context mContext;
private AlbumModel mAlbumModel;
private OnItemClickListener mOnItemClickListener;
private List<ViewHolder> mViewHolders = new ArrayList<>();
Handler handler;
File dir;
public AlbumAdapterDemo(Context context, AlbumModel albumModel, OnItemClickListener listener) {
mContext = context;
mAlbumModel = albumModel;
this.mOnItemClickListener = listener;
dir = new File(context.getExternalFilesDir(null), "audio");
boolean isDirectoryCreated = dir.exists();
if (!isDirectoryCreated) {
isDirectoryCreated = dir.mkdirs();
}
if (isDirectoryCreated) {
// do something
Log.d("mkdirs option", "Directory already exists.");
}
}
public void deleteItem(int position) {
mAlbumModel.getAudios().remove(position);
notifyItemRemoved(position);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.item_album, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
mViewHolders.add(viewHolder);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Audio audio = getItem(position);
if (holder.tvAlbumTitle != null) {
assert audio != null;
holder.tvAlbumTitle.setText(audio.getTrackName().replace(".mp3", "").replace("_", " "));
}
if (holder.audioSize != null) {
assert audio != null;
holder.audioSize.setText(audio.getTrackSize());
}
if (Utils.checkFileExist(dir.getPath() + "/" + mAlbumModel.getAudios().get(position).getTrackName())) {
if (holder.btnDownload != null) {
holder.btnDownload.setVisibility(View.INVISIBLE);
}
if (holder.btnDelete != null) {
holder.btnDelete.setVisibility(View.VISIBLE);
}
} else {
if (holder.btnDelete != null) {
holder.btnDelete.setVisibility(View.INVISIBLE);
}
if (holder.btnDownload != null) {
holder.btnDownload.setVisibility(View.VISIBLE);
}
}
}
@Override
public int getItemCount() {
return mAlbumModel.getAudios().size();
}
private Audio getItem(int position) {
if (position >= 0 && position < mAlbumModel.getAudios().size()) {
return mAlbumModel.getAudios().get(position);
}
return null;
}
public void onEvent(AudioEvent event) {
switch (event.getType()) {
case STOP:
for (ViewHolder vh : mViewHolders) {
if (vh != null) {
Audio audio = getItem(vh.getAdapterPosition());
if (audio != null && audio.getTrackId() == (event.getAudio().getTrackId())
&& audio.getTrackName().equals(event.getAudio().getTrackName())) {
vh.closeSeekBar(true);
}
}
}
}
}
public class ViewHolder extends RecyclerView.ViewHolder {
@Nullable
@Bind(R.id.rl_item_album)
LinearLayout mLinearLayout;
@Nullable
@Bind(R.id.tv_item_album)
TextView tvAlbumTitle;
@Nullable
@Bind(R.id.btn_delete)
ImageButton btnDelete;
@Nullable
@Bind(R.id.btn_download)
ImageButton btnDownload;
@Nullable
@Bind(R.id.audioSize)
TextView audioSize;
@Nullable
@Bind(R.id.progressBar)
SeekBar mProgressBar;
public ViewHolder(View itemView) {
super(itemView);
try {
ButterKnife.bind(this, itemView);
} catch (Exception e) {
e.printStackTrace();
}
handler = new Handler();
}
@OnClick(R.id.rl_item_album)
void clickItem() {
Intent intent = new Intent(mContext, PlayActivity.class);
intent.putExtra("category", mAlbumModel.getCategory());
intent.putExtra("url", mAlbumModel.getCategory() + "/" + mAlbumModel.getAlbum() + "/" + mAlbumModel.getAudios().get(getAdapterPosition()).getTrackName());
mContext.startActivity(intent);
}
@OnClick({R.id.btn_download, R.id.btn_delete})
void options(View view) {
switch (view.getId()) {
case R.id.btn_delete:
if (mOnItemClickListener != null) {
mOnItemClickListener.onDeleteListener(mAlbumModel, getAdapterPosition());
}
break;
case R.id.btn_download:
mOnItemClickListener.onDownloadListener(mAlbumModel, getAdapterPosition());
break;
}
}
public void closeSeekBar(boolean isSeekBar) {
if (isSeekBar) {
if (btnDownload != null) {
btnDownload.setVisibility(View.GONE);
}
if (btnDelete != null) {
btnDelete.setVisibility(View.VISIBLE);
}
}
}
}
public interface OnItemClickListener {
void onDeleteListener(AlbumModel model, int position);
void onDownloadListener(AlbumModel model, int position);
}
}
Ich möchte Ansicht aktualisieren aktualisieren, wenn Datei heruntergeladen wird. Es ist meine Dienstklasse
public class DownloadHelper extends Service {
DownloadManager downloadManager;
File dir;
private Audio mAudio;
private HashMap<Long, Audio> specialFeedItem;
Gson mGson;
private int counter = 0;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
specialFeedItem = new HashMap<>();
super.onCreate();
}
@Override
public int onStartCommand(final Intent intent, int flags, final int startId) {
if (intent != null) {
mGson = new Gson();
String filePath = intent.getStringExtra("file_path");
String fileName = intent.getStringExtra("file_name");
String audio = intent.getStringExtra("audio");
Type type = new TypeToken<Audio>() {
}.getType();
mAudio = mGson.fromJson(audio, type);
dir = new File(getExternalFilesDir(null), "audio");
if (!dir.exists()) {
dir.mkdir();
}
downloadManager = (DownloadManager) this.getSystemService(Context.DOWNLOAD_SERVICE);
Uri download_uri = Uri.parse(filePath);
DownloadManager.Request request = new DownloadManager.Request(download_uri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
request.setAllowedOverRoaming(false);
request.setDescription(mAudio.getTrackName());
request.setTitle("test");
request.setDestinationInExternalFilesDir(this, dir.getName(), fileName);
final long enqueue = downloadManager.enqueue(request);
specialFeedItem.put(enqueue, mAudio);
specialFeedItem.get(enqueue).setDownloaded(false);
new Thread(new Runnable() {
@Override
public void run() {
try {
boolean downloading = true;
while (downloading) {
DownloadManager.Query q = new DownloadManager.Query();
q.setFilterById(enqueue);
Cursor cursor = downloadManager.query(q);
if (cursor.moveToFirst()) {
if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_SUCCESSFUL) {
downloading = false;
if (specialFeedItem.get(enqueue) != null) {
Audio audio1 = specialFeedItem.get(enqueue);
specialFeedItem.get(enqueue).setDownloaded(true);
EventBus.getDefault().post(AudioEvent.stop(audio1));
//Toast.makeText(DownloadHelper.this, audio1.getTrackName() + " yuklandi.", Toast.LENGTH_SHORT).show();
counter++;
}
} else {
if (cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) == DownloadManager.STATUS_FAILED) {
//Utils.showToast(DownloadHelper.this, "Yuklashda xatolik bo'ldi?");
}
}
cursor.close();
}
}
} finally {
if (specialFeedItem.size() == counter) {
EventBus.getDefault().post(AudioEvent.update());
Log.d("Service ", " is done his job ");
}
}
}
}).start();
}
return START_STICKY;
}
}
So Wie kann ich meine Ansicht zur Laufzeit in recyclerView aktualisieren. Jede Hilfe wird geschätzt.
Aufruf Bitte kann mir jemand helfen Es ist es wirklich wichtig, –