У нас возникла проблема с тем, что содержимое HorizontalScrollview не обновляется динамически. В первый раз при вызове функции ниже правильно настройте содержимое прокрутки (Called from onCreate). Но со следующего раза макет не обновляется (в основном вызов функции после некоторых новых загрузок выполняется в фоновом режиме). playlist_scroll - это HorizontalScrollView, в котором мы имеем LinearLayout playlist_content, к которому добавляются элементы (завышенные из partial_main_playlist).Android: содержимое HorizontalScrollview не обновляется Динамически
HorizontalScrollView playlist_scroll = (HorizontalScrollView) findViewById(R.id.playlist_scroll);
LinearLayout playlist_content = (LinearLayout) findViewById(R.id.playlist_content);
private void setPlaylistNameScroll(List<Playlist> result) {
if (result != null && result.size() > 0) {
playlist_row_position = 0;
playlists = result;
playlist_content.removeAllViews();
for (Playlist playlist : playlists) {
playlist_ll = (LinearLayout) getLayoutInflater().inflate(R.layout.partial_main_playlist, playlist_content, false);
playlist_ll.setTag(playlist.getId());
Log.d(TAG, "setPlaylistNameScroll - playlist " + playlist.getName());
if (border != null && !border.equals("")) {
playlist_ll.setBackgroundColor(Color.parseColor("#" + border));
}
playlist_row = (LinearLayout) playlist_ll.findViewById(R.id.playlist_row);
LinearLayout.LayoutParams playlist_row_params = (LinearLayout.LayoutParams) playlist_row.getLayoutParams();
playlist_row_params.width = playlist_row_width;
playlist_row_params.height = playlist_row_height;
playlist_row.setLayoutParams(playlist_row_params);
playlist_row_item = (LinearLayout) playlist_ll.findViewById(R.id.playlist_row_item);
if (playlist_bg_bitmap_draw != null) {
playlist_row_item.setBackground(playlist_bg_bitmap_draw);
}
playlist_tv = (TextView) playlist_ll.findViewById(R.id.playlist_tv);
String _playlist_name = playlist.getName();
playlist_tv.setText(_playlist_name);
playlist_tv.setTextColor(Color.parseColor("#" + playlist_title_color));
playlist_ll.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
v.startAnimation(btn_click_animation);
break;
}
return false;
}
});
playlist_content.addView(playlist_row, playlist_row_position++);
}
playlist_scroll.post(new Runnable() {
public void run() {
if(playlist_content.getParent() != null)
{
((ViewGroup)playlist_content.getParent()).removeView(playlist_content);
}
playlist_scroll.addView(playlist_content);
}
});
}
}
partial_main_playlist.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="match_parent"
android:orientation="horizontal"
android:id="@+id/playlist_row"
android:clickable="true"
android:onClick="playlistClicked"
android:background="@color/colorDefaultBg">
<LinearLayout
android:id="@+id/playlist_row_item"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_margin="@dimen/resource_row_margin"
android:orientation="horizontal">
<TextView
android:id="@+id/playlist_tv"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="0.9"
android:textAlignment="center"
android:ellipsize="marquee"
android:maxLines="1"
android:textStyle="bold"
android:gravity="center"
android:layout_gravity="center_vertical"
android:text="Playlist"
android:textColor="@color/colorDefaultText"
android:textSize="@dimen/playlist_scroll_title_font" />
<ImageView
android:id="@+id/playlist_status"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="0.1"
android:layout_gravity="end"
android:gravity="center"
android:scaleType="center"
android:visibility="invisible"
android:src="@drawable/shuffle"/>
</LinearLayout>
</LinearLayout>
We have referred the answer here and implemented the above code
метод setPlaylistNameScroll вызывается из ReceiveResult на Сервис загрузки, как этот
public void onReceiveResult(int resultCode, Bundle resultData) {
String error;
switch (resultCode) {
case DownloadService.STATUS_RUNNING:
media_syncing = true;
Log.d(TAG, "DownloadService.STATUS_RUNNING");
break;
case DownloadService.STATUS_FINISHED:
Log.d(TAG, "DownloadService.STATUS_FINISHED");
setPlaylistNameScroll(databaseHandler.getDevicePlaylists(device_id, playlist_ordering));
break;
case DownloadService.STATUS_ERROR:
media_syncing = false;
error = resultData.getString(Intent.EXTRA_TEXT);
Log.d(TAG, "DownloadService.STATUS_ERROR " + error);
break;
case DownloadService.STATUS_STOPPED:
media_syncing = false;
error = resultData.getString(Intent.EXTRA_TEXT);
Log.d(TAG, "DownloadService.STATUS_STOPPED " + error);
break;
}
}
Вы ничего не упомянули о горизонтальном прокрутке в вашем коде. – chandil03
@ chandil03 Извините, playlist_scroll - это HorizontalScrollView, в котором у нас есть Linlingayout playlist_content, к которому мы добавляем элементы. См. Мой отредактированный вопрос. –
где ваш код загрузки? или код, в котором вы обновляете контент в linearLayout внутри scrollView. – chandil03