2015-11-07 85 views
0

我想排序我的图片列表在一个单独的片段上的GridView。 问题是,当我删除旧的片段,并添加新的片段旧的stil盛行,新的打印它的顶部。 这是我刷新视图的方式。Android的片段刷新不起作用

Bundle bundle = new Bundle(); 
    bundle.putString("sort", sort); 

    android.support.v4.app.Fragment frg = new MainActivityFragment(); 
    android.support.v4.app.Fragment currentFrg = getSupportFragmentManager().findFragmentById(R.id.fragment); 
    final android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.remove(currentFrg); 
    frg.setArguments(bundle); 
    ft.add(R.id.fragment, frg).commit(); 

请给我一些关于这方面的提示。

这是片段类

public class MainActivityFragment extends Fragment { 

private MovieAdaptor movieAdaptor; 

GridView gridView; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_main, container, false); 

    ImageView iconView = (ImageView) this.getActivity().findViewById(R.id.list_item_icon); 

    FetchMovieTask task = new FetchMovieTask(); 
    String sort = ""; 
    Bundle bundle = this.getArguments(); 
    if (bundle != null) { 
     sort = bundle.getString("sort", "popularity.desc"); 
    } 

    try { 
     movieAdaptor = new MovieAdaptor(this.getActivity(), (List<Movie>) task.execute(sort).get()); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     e.printStackTrace(); 
    } 


    gridView = (GridView) rootView.findViewById(R.id.gridview); 

    if(movieAdaptor != null){ 

     Log.e("MOVIE_DATA", "movieAdaptor IS NOT NULL "); 
     gridView.setAdapter(movieAdaptor); 

    }else { 
     Log.e("MOVIE_DATA", "movieAdaptor IS NULL"); 
    } 

    return rootView; 
} 
} 

和MainActivity当选项菜单变更,本次交易要求; 这是关于代码;

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    int id = item.getItemId(); 

    String sort = ""; 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_sort_rating) { 
     sort = "vote_average.desc"; 

    } 

    if(id == R.id.action_sort_popularity){ 
     sort = "popularity.desc"; 

    } 

    if(id == R.id.action_sort_release_date){ 
     sort = "release_date.desc"; 

    } 

    Bundle bundle = new Bundle(); 
    bundle.putString("sort", sort); 
    android.support.v4.app.Fragment frg = new MainActivityFragment(); 
    final android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    frg.setArguments(bundle); 
    ft.replace(R.id.fragment, frg).commit(); 



    return true; 

    //return super.onOptionsItemSelected(item); 
} 

这是我fragment_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
tools:context=".MainActivity$MainActivityFragment"> 


<GridView 
    android:id="@+id/gridview" 
    android:numColumns="2" 
    android:gravity="top" 
    android:columnWidth="50dp" 
    android:stretchMode="columnWidth" 
    android:layout_width="fill_parent" 
    android:layout_height="match_parent" 
    android:verticalSpacing="0dp" 
    android:horizontalSpacing="0dp" 
    > 

</GridView> 
</RelativeLayout> 

activity_main.xml中

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/fragment" 
     android:name="com.alpha0.popular_movies_app.MainActivityFragment" 
     tools:layout="@layout/fragment_main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

回答

1

好视@Guillaume因贝特指出的那样,你的问题是fragment标签。用RelativeLayout重新标记fragment标记,并在相对布局中使用id = fragment的FrameLayout。然后在活动中动态使用TransactionManager来设置Fragment。这将解决您的问题。

+0

@rolde哇你的解决方案完美无缺。不是为了你,谢谢 – shan

+2

实际上,应该移除FrameLout周围的RelativeLayout来抑制布局过程,你可以直接使用FrameLayou Ť –

1
Bundle bundle = new Bundle(); 
bundle.putString("sort", sort); 
android.support.v4.app.Fragment frg = new MainActivityFragment(); 
    final android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
frg.setArguments(bundle); 
ft.replace(R.id.fragment, frg).commit(); 
+0

谢谢我认为这个解决方案将工作。让我试试看。 – shan

+0

Nada :(相同的场景发生,我也会发布我的片段) – shan

+0

显示调用这个事务的类,你可能不会传入代码块 –