我用我的片段替换了简单ProgressBar的ContentLoadingProgressBar.现在片段布局如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/simple_match_parent_style">
<android.support.v4.widget.ContentLoadingProgressBar
android:id="@+id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
<TextView
android:id="@+id/txt_no_songs"
android:text="@string/txt_no_songs"
android:layout_centerInParent="true"
style="@style/txt_no_songs"/>
<ListView
android:id="@+id/list"
android:fastScrollEnabled="true"
android:divider="@null"
style="@style/simple_match_parent_style"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
我将此ProgressBar显示在onViewCreated:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
progressBar = (ContentLoadingProgressBar) view.findViewById(R.id.progress);
progressBar.show();
...
}
Run Code Online (Sandbox Code Playgroud)
出于测试目的,我已删除progressBar.hide()调用以使ProgressBar出现在任何情况下.但问题是我ContentLoadingProgressBar从未真正展示过.
我应该做些别的事ContentLoadingProgressBar吗?我没有设法找到任何相关的使用示例,ContentLoadingProgressBar因此任何有用的示例也是可取的.提前致谢.
我有ViewPager我使用的用于显示一些片段,我也有TextView我的FragmentActivity.我需要TextView根据当前选择的片段来更改文本ViewPager.我面临的问题是:ViewPager有一些缓存机制,它会在用户真正可见之前实例化片段,例如当我ViewPager在第三页的片段中选择第二页时也会创建.更重要的是我无法确定内部片段是这个片段现在可见还是刚刚创建的ViewPager,但对用户来说并不是真的可见.我tryed使用OnPageChangeListener这一点,但它所做的更改是不可接受的慢,我(页面滚动,然后我TextView改变了)
我真的需要:我需要确定哪些片段是目前可见ViewPager,无论从FragmentActivity还是从Fragment自身.我怎样才能做到这一点?
我在地图上画了很多标记,当它们靠近时它们相互重叠.因此,我希望在小缩放时隐藏一些标记,并在用户缩放地图时显示更多标记.像更多放大,更多标记.这里是活动的示例代码和标记的创建,你可以看到我正在使用谷歌地图android api v2:
public class MainActivity extends FragmentActivity
{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GoogleMap map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
map.getUiSettings().setMyLocationButtonEnabled(true);
createMarkers(map);
}
private void createMarkers(GoogleMap map) {
double initLat = 48.462740;
double initLng = 35.039572;
for(float i = 0; i < 2; i+=0.2) {
LatLng pos = new LatLng(initLat + i,initLng);
map.addMarker(new MarkerOptions()
.position(pos)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)));
}
for(float i = 0; i < 2; i+=0.2) {
LatLng pos = new LatLng(initLat, initLng + i);
map.addMarker(new MarkerOptions()
.position(pos)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher))); …Run Code Online (Sandbox Code Playgroud) 我正在尝试进行简单的浓缩咖啡测试,找到RecyclerView没有特定标签的第一个项目,
然后点击它.为实现这一点,我添加espresso-contrib到这样的项目:
androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.2') {
// Necessary to avoid version conflicts
exclude group: 'com.android.support', module: 'appcompat'
exclude group: 'com.android.support', module: 'design'
exclude group: 'com.android.support', module: 'support-v4'
exclude group: 'com.android.support', module: 'appcompat-v7'
exclude group: 'com.android.support', module: 'support-annotations'
exclude module: 'recyclerview-v7'
}
Run Code Online (Sandbox Code Playgroud)
并在我的测试用例中写下以下表达式:
onView(withId(R.id.sresults_list_recycler)).perform(RecyclerViewActions.actionOnHolderItem(new FirstNotSoldOutMatcher(), click()).atPosition(1));
Matcher完美运行并RecyclerView滚动到目标项目.但后来我得到错误:
java.lang.NoSuchMethodError: No virtual method findViewHolderForPosition(I)Landroid/support/v7/widget/RecyclerView$ViewHolder; in class Landroid/support/v7/widget/RecyclerView; or its super classes (declaration of 'android.support.v7.widget.RecyclerView' appears in /data/app/com.example-1/base.apk)
at android.support.test.espresso.contrib.RecyclerViewActions$ActionOnItemAtPositionViewAction.perform(RecyclerViewActions.java:288)
at android.support.test.espresso.contrib.RecyclerViewActions$ActionOnItemViewAction.perform(RecyclerViewActions.java:232)
at android.support.test.espresso.ViewInteraction$1.run(ViewInteraction.java:144)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.Handler.handleCallback(Handler.java:751) …Run Code Online (Sandbox Code Playgroud) 我有一个5个片段的viewpager,其中一个我希望通过按钮点击完全替换它.我也希望能够通过后退按钮隐藏子片段.这里的片段布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:id="@+id/contacts_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null">
<LinearLayout
android:id="@+id/import_contacts"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<include layout="@layout/listview_filter"/>
<Button
android:id="@+id/btn_my_clusters"
android:background="@drawable/btn_wide_arrow_bg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@color/TEXT"
android:text="@string/btn_my_clusters_text"
android:layout_marginBottom="10dp"/>
<ProgressBar
android:id="@+id/progress_bar"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:layout_gravity="center"/>
<ListView
android:id="@+id/contacts_list"
android:divider="@null"
android:listSelector="@android:color/transparent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="gone"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
当我尝试contacts_layout像这样替换:
ImportContactsFragment importContactsFragment = new ImportContactsFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.addToBackStack(null);
transaction.replace(R.id.contacts_layout, importContactsFragment).commit();
Run Code Online (Sandbox Code Playgroud)
它不起作用(我的意思是没有错误,但我的ImportContactsFragment根本没有显示).但是当我尝试替换这样的import_contacts视图时:
ImportContactsFragment importContactsFragment = new ImportContactsFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.addToBackStack(null);
transaction.replace(R.id.import_contacts, importContactsFragment).commit();
Run Code Online (Sandbox Code Playgroud)
一切正常,显示了ImportContactsFragment.
所以我想知道是否可以用子片段替换所有片段内容?也许我可以用其他方式做到这一点?
我有与RemoteControlClient交互的音乐播放器应用程序.我需要加载专辑封面图像以在锁定屏幕小部件中显示它.我尝试使用Piccasso来实现这一目标.我写了下面的代码:
private final Target artworkTarget = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) {
remoteControlClient.editMetadata(false).putBitmap(RemoteControlClientCompat.MetadataEditorCompat.METADATA_KEY_ARTWORK,
bitmap).apply();
}
@Override
public void onBitmapFailed(Drawable drawable) {
Log.e(Constants.LOG_TAG, "Artwork loading failed");
}
@Override
public void onPrepareLoad(Drawable drawable) {
}
};
...
private void playNextSong(int songPosition) {
...
String artworkUrl = Constants.Urls.BASE_ARTWORK_URL + currentSong.getArtworkId();
Picasso.with(this).load(artworkUrl).skipMemoryCache().into(artworkTarget);
// Update the remote controls
remoteControlClient.editMetadata(true)
.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, currentSong.getArtist().getName())
.putString(MediaMetadataRetriever.METADATA_KEY_ALBUM, currentSong.getAlbum().getName())
.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, currentSong.getName())
.apply();
...
}
Run Code Online (Sandbox Code Playgroud)
但有时我得到例外:
ERROR/AndroidRuntime(31121): FATAL EXCEPTION: main
java.lang.IllegalArgumentException: Cannot draw recycled bitmaps
at android.view.GLES20Canvas.drawBitmap(GLES20Canvas.java:772) …Run Code Online (Sandbox Code Playgroud) 我正在使用ViewPagerIndicator lib中的TabPageIndicator和ViewPager来显示6个片段.假设我在第一页,如果我点击第6个标签,我会看到所有页面都滚动.是否可以禁用此动画?也许我可以在ViewPager中以某种方式禁用它?
这是适配器的代码:
public class TabBarFragmentPagerAdapter extends FragmentPagerAdapter implements IconPagerAdapter {
private final List<Fragment> items;
private static final String[] TITLES = new String[] { "Home", "Profile", "Explore", "Contacts", "Beacon" };
private static final int[] ICONS = new int[] {
R.drawable.icon_tabbar_home_bg,
R.drawable.icon_tabbar_profile_bg,
R.drawable.icon_tabbar_explore_bg,
R.drawable.icon_tabbar_contacts_bg,
R.drawable.icon_tabbar_beacon_bg
};
public TabBarFragmentPagerAdapter(FragmentManager fm, List<Fragment> items) {
super(fm);
this.items = items;
}
@Override
public Fragment getItem(int position) {
return items.get(position);
}
@Override
public int getIconResId(int index) {
return ICONS[index];
}
@Override
public CharSequence getPageTitle(int position) { …Run Code Online (Sandbox Code Playgroud)