【问题标题】:Gridview fragment not refreshingGridview片段不刷新
【发布时间】:2012-11-16 02:50:41
【问题描述】:

我有一个 FrameLayout 作为滑动抽屉的内容,我用片段替换它。当我的活动开始时,FrameLayout 被 GridView 片段替换。当我单击 GridView 中的一个项目时,它会将 FrameLayout 替换为 TextView 片段。这个新片段有一个按钮,可以返回并用 GridView 片段再次替换 FrameLayout。这一切都很好,但是由于某种原因,GridView 和 TextView 在更改为时都不会刷新,但是在我单击一个从服务器获取信息的按钮之后,当时可见的任何一个都会刷新新信息。有没有办法让 android 认为我需要重绘 GridView 和 TextView?我已经在所有地方都尝试过 invalidate() ,但它似乎没有丝毫工作。似乎android正在调用GridView适配器上的“getView”方法,然后刷新,但是当片段更改为gridview时,它从未被调用。

对于令人困惑的问题和解释,我真的不知道要发布什么代码,因为代码太多了。我会根据要求更新代码。请帮忙!谢谢。

这里是点击框架布局被 textview 布局替换的地方:

    playerGridView = (GridView) findViewById(R.id.playerInfoGrid);
    if (playerGridView != null) {
        playerGridView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                drawerFragment2 = new topFrag();
                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                transaction.replace(R.id.frag_content, drawerFragment2);
                transaction.addToBackStack(null);
                transaction.commit();
            }
        });
    }

topFrag 是这样的:

public class topFrag extends Fragment {

private TextView view;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.slidingdrawer2, container, false);
}

@Override
public void onStart() {
    super.onStart();
    view = (TextView) getView().findViewById(R.id.characterInfo);
    view.setText("hello");
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}
}

内部有框架布局的主布局:

<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >    
<SlidingDrawer
     android:id="@+id/drawer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:topOffset="125dip"
     android:handle="@+id/handle" 
     android:content="@+id/frag_content">

    <ImageView 
        android:id="@+id/handle" 
        android:contentDescription="@string/handle"
        android:layout_width="120dip" 
        android:layout_height="30dip"
        android:src="@drawable/drawertab"/>

    <FrameLayout
        android:id="@+id/frag_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</SlidingDrawer>

</RelativeLayout>

这是我用以下内容替换框架布局的内容:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#50808080" >

<TextView
    android:id="@+id/characterInfo"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/playerInfoBack"
    android:text=""
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="#FFFFFF" />

<Button
    android:id="@+id/playerInfoBack"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="@string/back"
    android:onClick="back" />

</RelativeLayout>

不知道这是否有帮助,或者只是让它变得更加混乱。

当您单击 playerGridView 上的项目时,它会将 framelayout(主布局)替换为新的“topFrag”(首先显示),它使用带有按钮的 textview 布局来膨胀片段。我只想在单击项目后更新你好。感谢收看!

【问题讨论】:

    标签: android replace android-fragments refresh


    【解决方案1】:

    对于 GridView,您可以在支持 GridView 的适配器上调用 notifyDataSetChanged(),以便它知道要更新。

    对于 TextView,我必须查看代码才能了解那里发生了什么。

    【讨论】:

    • 我尝试为 gridview 做一个 notifyDataSetChanged() 并且根本不影响它。我使用更简单的文本视图进行编辑。感谢您的尝试!
    • 原来片段的onStart方法需要在其中设置文本。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    相关资源
    最近更新 更多