小编Mau*_*ycy的帖子

支持FragmentPagerAdapter保存对旧片段的引用

最新信息:

我已经把我的问题缩小到了一个问题,片段管理器保留了旧片段的实例,而我的viewpager与我的FragmentManager不同步.请参阅此问题... http://code.google.com/p/android/issues/detail?id=19211#makechanges.我仍然不知道如何解决这个问题.有什么建议...

我试图调试这个很长一段时间,任何帮助将不胜感激.我正在使用FragmentPagerAdapter,它接受一个像这样的片段列表:

List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, Fragment1.class.getName())); 
...
new PagerAdapter(getSupportFragmentManager(), fragments);
Run Code Online (Sandbox Code Playgroud)

实施是标准的.我正在为Fragments使用ActionBarSherlock和v4可计算性库.

我的问题是,在离开应用程序并打开其他几个应用程序并返回后,片段将丢失其对FragmentActivity的引用(即.getActivity() == null).我无法弄清楚为什么会这样.我试图手动设置,setRetainInstance(true);但这没有帮助.我想当我的FragmentActivity被破坏时会发生这种情况,但是如果我在收到日志消息之前打开应用程序,这仍然会发生.有什么想法吗?

@Override
protected void onDestroy(){
    Log.w(TAG, "DESTROYDESTROYDESTROYDESTROYDESTROYDESTROYDESTROY");
    super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)

适配器:

public class PagerAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragments;

    public PagerAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);

        this.fragments = fragments;

    }

    @Override
    public Fragment getItem(int position) {

        return this.fragments.get(position);

    }

    @Override
    public int getCount() {

        return this.fragments.size();

    }

}
Run Code Online (Sandbox Code Playgroud)

我的一个碎片被剥夺了但是我很满意每一个被剥离但仍然无法工作的东西......

public class MyFragment extends Fragment implements MyFragmentInterface, OnScrollListener …
Run Code Online (Sandbox Code Playgroud)

android android-fragments

107
推荐指数
6
解决办法
10万
查看次数

FragmentPagerAdapter未正确删除项目(片段)

我已经实现了FragmentPagerAdapter和使用a List<Fragment>来保存所有片段以供我ViewPager显示.在addItem()我只是添加一个实例化Fragment然后调用notifyDataSetChanged().我不确定这是否有必要.

我的问题只是......从片段1开始

[Fragment 1] 
Run Code Online (Sandbox Code Playgroud)

添加新的片段2

[Fragment 1] [Fragment 2]
Run Code Online (Sandbox Code Playgroud)

删除片段2

[Fragment 1]
Run Code Online (Sandbox Code Playgroud)

添加新的片段3

[Fragment 1] [Fragment 2]
Run Code Online (Sandbox Code Playgroud)

添加新片段时,一切看起来都很棒.删除片段然后添加新实例化的片段后,仍会显示旧片段.当我去.getClass.getName()它时,它给了我片段3的名字,但我仍然看到片段2.

我相信这可能是一个问题,instantiateItem()但我认为适配器是为我们处理.任何建议都会很棒.

适配器代码......

public class MyPagerAdapter extends FragmentPagerAdapter {
public final ArrayList<Fragment> screens2 = new ArrayList<Fragment>();


private Context context;

public MyPagerAdapter(FragmentManager fm, Context context) {
    super(fm);
    this.context = context;
}

public void removeType(String name){
    for(Fragment f: screens2){
        if(f.getClass().getName().contains(name)){ screens2.remove(f); return; }
    }
    this.notifyDataSetChanged();
}

public boolean addSt(String …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager

43
推荐指数
2
解决办法
3万
查看次数

在ListView中使用clipToPadding时,项目会过早地回收

设置时

android:clipToPadding="false"
Run Code Online (Sandbox Code Playgroud)

在2.3.3安卓设备上的标准ListView中,我看到列表项目过早被回收.适配器的视图在完全滚动到填充之后被移除而不是滚动超过屏幕边缘导致视图被过早删除.有没有人能够解决这个问题?

android android-listview

19
推荐指数
1
解决办法
2万
查看次数

android 4.0.3 ACTION_INSERT_OR_EDIT意图不起作用

当我试图像这样使用这个意图....

Intent i = new Intent(Intent.ACTION_INSERT_OR_EDIT);
i.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
startActivityForResult(i,INSERT_CONTACT);
Run Code Online (Sandbox Code Playgroud)

它加载联系人列表然后选择或创建一个联系人后我不会返回到我的应用程序.我检查了日志,没有什么突出的.在ICS中有新的意图行动吗?

谢谢

android android-4.0-ice-cream-sandwich

14
推荐指数
1
解决办法
1344
查看次数

比较可能为null的字符串的更好方法

我只是想知道是否有更好的方法来做到这一点.我觉得它可能效率低下.问题是出于DB的原因我需要比较有时可能为null的字符串.

public static boolean compareStrings(String str1, String str2){

    if(str1 == null && str2 == null) return true;

    if(str1 != null && str2 != null){
        if(str1.equals(str2))
            return true;
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

java string

13
推荐指数
2
解决办法
2万
查看次数

Kotlin MPP 期望/实际具有不同的签名

我有一个管理器类,它有一个 Android 和 iOS impl(来自第 3 方库)。“例如 MyManagerImpl()”。为了构建第 3 方管理器,iOS 不需要 Context,但 Android 需要。我创建了一个公共类“MyManager”,它提取了需要在 commonMain 中调用的所有公共方法。

//commonMain
expect class MyManager {
  fun method1()
  companion object Factory {
    makeManager(): MyManager
  }
}

val manager = MyManager.Factory.makeManager() // ex intended usage

//androidMain
MyManagerImpl(context: Context) {
  fun method1()
}

actual class MyManager private constructor(manager: MyManagerImpl) {
  ..
  actual companion object Factory {
    override fun makeManager(): MyManager {
      return MyManager(MyManagerImpl(?how to get context?))
    }
  }
}

//iosMain
MyManagerImpl() {
  fun method1()
}

actual class …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-multiplatform

11
推荐指数
2
解决办法
4845
查看次数

如何在 Jetpack 的 Compose 中管理 Focus 状态

我有一个自定义的可组合视图(本质上是表面 + 文本),我想根据焦点状态更改表面的颜色。FocusManager#FocusNode 被标记为内部,我不知道有什么方法可以实现这一点。这只是还不可用吗?还有其他人需要解决这个问题吗?

android focusmanager android-jetpack android-jetpack-compose composable

9
推荐指数
3
解决办法
4243
查看次数

ListView with horizo​​ntalScrollView OnItemClick无法正常工作

所以我很快就得到了一个带有自定义适配器的listView,并且它包含了一个包含horizo​​ntalScrollView以及textview等的视图.我遇到的问题是,当我尝试将一个监听器附加到此listView时,它没有收到任何回调.

我认为这个问题与我的列表项包含一个拦截点击事件的滚动视图这一事实有关(虽然我认为它应该只拦截其他手势).

code ...(我的列表项xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearMain"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"

    android:orientation="vertical" >

    <RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/grey" >

        <TextView
            android:id="@+id/headerName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:padding="4dp"
            android:textColor="@color/text_header"
            android:textStyle="bold"
            android:text="TextView" />

    </RelativeLayout>
    <View
        android:background="@color/border"
        android:layout_width="fill_parent"
        android:layout_height="1px" />
    <HorizontalScrollView
        android:id="@+id/horizontalScrollView1"
        android:layout_width="fill_parent"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:id="@+id/linearImages"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal" 
            android:padding="4dp">
        </LinearLayout>
    </HorizontalScrollView>
    <View
        android:background="@color/border"
        android:layout_width="fill_parent"
        android:layout_height="1px" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

然后在我的onCreate ...

lv.setAdapter(myobj.adapter);
    lv.setTextFilterEnabled(true);
    lv.setOnItemClickListener(new OnItemClickListener(){

        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub …
Run Code Online (Sandbox Code Playgroud)

android android-listview

6
推荐指数
1
解决办法
3371
查看次数

按钮需要填充父单选按钮

我有一个带两个radiobutton的无线电组.每个按钮都有一个自定义选择器 我希望选择器中的drawable可以填充单选按钮的宽度.在不同分辨率下,按钮看起来不同.我没有使用9补丁,所以这是有道理但即使我是我不知道如何使按钮拉伸拉伸.下面是无线电组和选择器的代码.宽度不同于摆弄.

布局xml:

            <RadioButton
                android:id="@+id/radiomale"
                android:layout_width="126dp"
                android:layout_height="50dp"
                android:minHeight="50dp"
                android:minWidth="126dp"
                android:button="@layout/signupmale"

                />

            <RadioButton
                android:id="@+id/radiofemale"
                 android:layout_width="128dp"
                android:layout_height="50dp"
                android:minHeight="50dp"
                android:minWidth="128dp"
                android:button="@layout/signupfemale" />
        </RadioGroup>
Run Code Online (Sandbox Code Playgroud)

选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:state_window_focused="false"
    android:drawable="@drawable/genre_male_pressed" />
<item android:state_checked="false" android:state_window_focused="false"
    android:drawable="@drawable/genre_male" />
<item android:state_checked="true" android:state_pressed="true"
    android:drawable="@drawable/genre_male_pressed" />
<item android:state_checked="false" android:state_pressed="true"
    android:drawable="@drawable/genre_male" />
<item android:state_checked="true" android:state_focused="true"
    android:drawable="@drawable/genre_male_pressed" />
<item android:state_checked="false" android:state_focused="true"
    android:drawable="@drawable/genre_male" />
<item android:state_checked="false" android:drawable="@drawable/genre_male" android:scaleType="fitXY" />
<item android:state_checked="true" android:drawable="@drawable/genre_male_pressed" android:scaleType="fitXY"/>
</selector>
Run Code Online (Sandbox Code Playgroud)

问题是在按钮之间的不同分辨率间隙测试时.谢谢你的帮助.

layout android

5
推荐指数
1
解决办法
3896
查看次数

Android Studio没有使用gradle来构建我的项目

我从Eclipse导入了一个项目,android studio没有使用我的gradle脚本来构建项目.还有谁有相同的问题吗?反正是否迫使Android Studio使用gradle来构建我的项目.

android gradle android-studio

3
推荐指数
1
解决办法
1万
查看次数