刷新数据显示在片段上

时间:2015-07-22 13:33:05

标签: android android-fragments refresh

我在视图寻呼机上有两个片段。 我曾经不得不将数据从片段B移动到A并刷新A上显示的数据,我用getItemPosition完成了它。 出于某种原因,当我尝试重置所有数据时,同样的方法不起作用..

在我的适配器中我有:

public void refresh()
    {
        notifyDataSetChanged();
    }

    @Override
    public int getItemPosition( Object obj ) 
    {
        return POSITION_NONE; 
    }

在片段中,我点击“重置”#39; :

@Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        notTriedPasswordsList = PagerActivity.mainList;
.....
....
    resetButton.setOnClickListener( new View.OnClickListener() {
                    @Override
                    public void onClick( View v ) 
                    {
                        PagerActivity.resetPasswords();  
                        PagerActivity.viewPagerAdapter.refresh();
                    }});  

托管两个片段的viewPager活动:

public static void resetPasswords()
    {
        mainList.addAll( 0, historyList );
        historyList.clear();
        PagerActivity.viewPagerAdapter.refresh();
    }

显示通行证的主要片段:

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

.....
        nextCodeDisplay = ( TextView ) view.findViewById( R.id.passwordDisplayTextView );
        nextCodeDisplay.setText( notTriedPasswordsList.get( 0 ).getPasswordString() );

....
nextButton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) 
                {          
                notTriedPasswordsList.remove( 0 );

                        if( notTriedPasswordsList.size() > 0  && !(notTriedPasswordsList.get( 0 ).getTried()) )
                        {
                            nextCodeDisplay.setText( notTriedPasswordsList.get( 0 ).getPasswordString() );
                        }
                    }   

4 个答案:

答案 0 :(得分:2)

PagerActivity被视为静态类,您只能以这种方式访问​​静态方法和成员数据和对象。关于代码:

notTriedPasswordsList = PagerActivity.mainList;

注意:现在PagerActivity可以访问静态mainList对象,或notTriedPasswordsList(共享相同的内存)。但是这是您可以访问的唯一对象,因为您的代码引用了静态方法。

在代码PagerActivity.viewPagerAdapter.refresh()上,由于我没有看到足够的代码,我不清楚这次刷新的数据,同样refresh()必须是静态方法。使用代码notifyDataSetChanged(),viewPagerAdapter和数据对象之间必须存在直接链接,可能是 ArrayList 。当然,我认为两者之间没有任何直接关系。

也许你想要的代码如下:

viewPagerAdapter pagerAdapter = new viewPagerAdapter();

这样,您可以拥有适配器和可能的ArrayList对象之间的关系。使用 new 创建实例的好处是,在pagerAdapter的示例中,它以对象的形式将数据和状态保存在类中。

我现在无法建议具体的代码集,因为我没有看到足够数量的代码供我修复。也许你可以先修改代码,然后我们都可以做出贡献。

答案 1 :(得分:1)

您对PagerActivity.viewPagerAdapter.refresh();的调用不会导致您的片段被重绘。相反,您应该直接访问您的片段并在其中创建自定义refreshUI()方法。

public void refreshUI(){
     nextCodeDisplay.setText( notTriedPasswordsList.get( 0 ).getPasswordString() );
}

答案 2 :(得分:1)

我建议改变你的做法。我已将一个简单的项目上传到我的dropbox public folder。在这里,您可以找到ViewPager管理的两个片段如何共享信息的参考实现。第一个片段 - 片段#1 - 只显示由片段#2生成的字符串。片段#2有一个按钮,单击该按钮时,会通过活动将随机字符串发送到片段#1。无需刷新viewpager,无需静态方法,简单而有效。我想你可以根据自己的需要调整这个例子。

答案 3 :(得分:0)

正如您所说想要刷新数据,我个人建议使用刷卡刷新布局。它对于这个目的非常有用,也很时尚。以下是代码。

Swipe_Refresh_layout.xml

<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipe_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >





        <ListView android:id="@+id/listview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:clickable="true"
             />

</android.support.v4.widget.SwipeRefreshLayout>

以下是我用于此布局的活动。

public class LatestNewsFragment extends Fragment implements OnRefreshListener ,OnScrollListener{


    SwipeRefreshLayout swipeLayout;



    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
    {

        =
        View rootView = inflater.inflate(R.layout.Swipe_Refresh_layout, container, false);

        swipeLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipe_container);
        swipeLayout.setOnRefreshListener(this);
        swipeLayout.setColorScheme(android.R.color.holo_blue_bright, 
                android.R.color.holo_green_light, 
                android.R.color.holo_orange_light, 

                android.R.color.holo_red_light);

        return rootView;
    }

    public void onRefresh() {
        new Handler().postDelayed(new Runnable() {
            @Override public void run() {
                swipeLayout.setRefreshing(false);

                additemstatus();
            }
        }, 5000);
    }

现在,在重写刷新方法中,您可以刷新或加载数据。我希望这对你的支持非常有帮助。