2012-04-24 24 views
6

我对我的android应用程序有一种情况。场景是我使用的是一个视图页适配器翼起我有3个页面实际上是片段。我的问题是,我想从对话框活动中更新这些对象。该对话框活动包含我想要更新片段的onclick事件列表。如何通过另一个活动刷新viewpageadapter中的一个片段

首先是可能的,如果是的话,请切入并帮助我。

干杯 拉夫

这是我的看法页适配器

/* 
* Copyright (C) 2012 Gaurav Rawat 
* 
*/ 
package com.punksrant.ifinddryday.adapter; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

import com.punksrant.ifinddryday.fragment.AllFragment; 
import com.punksrant.ifinddryday.fragment.HomeFragment; 
import com.punksrant.ifinddryday.fragment.SynchFragment; 
import com.punksrant.ifinddryday.utils.IFindDryDaysConstants; 
import com.viewpagerindicator.TitleProvider; 

public class ViewPagerAdapter extends FragmentPagerAdapter implements 
     TitleProvider { 

    private static String[] titles = IFindDryDaysConstants.titles; 

    public ViewPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public String getTitle(int position) { 
     return titles[position % titles.length].toUpperCase(); 
    } 

    @Override 
    public int getCount() { 
     return titles.length; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Fragment fragment; 
     switch (position) { 
     case 0: 
      fragment = HomeFragment.newInstance(); 
      break; 
     case 1: 
      fragment = AllFragment.newInstance(); 
      break; 

     case 2: 
      fragment = SynchFragment.newInstance(titles[position 
        % titles.length]); 
      break; 

     default: 
      fragment = HomeFragment.newInstance(); 
     } 
     return fragment; 
    } 

} 
' and in this I want to refresh the home fragment from my dialog class 
'/* 
* Copyright (C) 2012 Gaurav Rawat 
* 
*/ 
package com.punksrant.ifinddryday.activity; 

import roboguice.inject.ContentView; 
import roboguice.inject.InjectView; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

import com.github.rtyley.android.sherlock.roboguice.activity.RoboSherlockFragmentActivity; 
import com.google.inject.Inject; 
import com.punksrant.ifinddryday.model.Coordinates; 
import com.punksrant.ifinddryday.utils.DryDayJSONResParser; 
import com.punksrant.ifinddryday.utils.IFindDryDayViewUtils; 

@ContentView(R.layout.statedialog) 
public class Dialog extends RoboSherlockFragmentActivity { 
    @InjectView(R.id.dialogList) 
    ListView listView; 
    @Inject 
    SharedPreferences preferences; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     String[] states = DryDayJSONResParser.getSupportedStates(); 
     listView.setAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, android.R.id.text1, states)); 
     listView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       String state = ((TextView) view).getText().toString(); 
       Coordinates coordinates = IFindDryDayViewUtils 
         .getCoordinatesFromPreferences(preferences); 
       coordinates.setState(state); 
       IFindDryDayViewUtils.updateCityFromLocation(coordinates, 
         preferences); 

       finish(); 
      } 

     }); 
    } 
}, 
+0

你的视图页适配器在哪里?你可以发布一些持有viewpager的活动代码吗? – gutiory 2012-04-24 07:52:17

+0

Hi @gutiory会将代码粘贴回家,实际上,jist是我正在使用Jake的ViewPagerIndicator库.http://github.com/JakeWharton/Android-ViewPagerIndicator,其中的片段是从fragmentpageadapter中添加的。请尽快发布代码我回来了。 – 2012-04-24 10:21:28

+0

这是我的查看页面适配器 – 2012-04-24 14:11:19

回答

1

(学分blahdiblah rui.araujo) 有几种方法来实现这一目标。

第一个选项更容易,但效率更低。

覆盖getItemPositionPagerAdapter这样的:

public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

这样,当你调用notifyDataSetChanged(),视图寻呼机将删除所有的意见并重新加载它们。因此获得了重载效果。

第二个选项suggested by alvarolbsetTag()方法在instantiateItem()实例化一个新的视图。然后,您可以使用findViewWithTag()来代替使用notifyDataSetChanged()来查找要更新的视图。

第二种方法非常灵活和高性能。对原始研究的荣誉alvarolb。

相关问题