2016-11-21 17 views
0

アプリケーションの開始時に何も含まれていないフラグメントがありますが、データがロードされた後、ロードされたデータが表示されます。 DataLoadedListenerを実装するonDataLoaded関数のすべてのデータをMainActivityでロードします。データがロードされた後、関数はデータ(ArrayList)を関数呼び出し(initializeAdapter())を介してパラメータとして送信します。次に、関数initializeAdapter()はそれを取得し、カスタムアダプターを初期化します(アダプターはグローバルオブジェクトであり、initializeAdapter()で初期化され、onCreateView()で使用されます)。Androidでフラグメントをリフレッシュする

データがロードされてアダプタが初期化された後、フラグメントビューを更新する必要がありますが、その方法はわかりません。私はたくさんの方法で試しましたが、それを作っていませんでした。

@Override 
    public void onDataLoaded(List<Grad> gradovi, List<Ponuda> ponude) { 

    Spinner spinnerGradovi = (Spinner) findViewById(R.id.gradovi_spinner); 
    ArrayAdapter<String> adapterGradovi; 
    List<String> listaGradova = new ArrayList<>(); 
    ArrayList<Ponuda> ponudaArrayList = new ArrayList<Ponuda>(); 

    ponudaLista = ponude; 
    gradLista = gradovi; 

    for(Grad grad : gradovi){ 
     listaGradova.add(grad.getNaziv()); 
    } 

    for(Ponuda ponuda : ponude){ 
     ponudaArrayList.add(ponuda); 
    } 


    adapterGradovi = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, listaGradova); 

    spinnerGradovi.setAdapter(adapterGradovi); 

    Fragment fragmentGet = svePonudeFragment; 

    ((SvePonudeFragment)fragmentGet).initializeAdapter(ponudaArrayList); 
} 

をinitializeAdapter()を呼び出し、これは私がデータがロードされていない場合はロードし、空のアダプターを作成する方法でも興味を持って断片

public class SvePonudeFragment extends Fragment { 

private RecyclerView rv; 
RVAdapter adapter; 

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

    rv = (RecyclerView) rootView.findViewById(R.id.rv); 

    LinearLayoutManager llm = new LinearLayoutManager(getActivity()); 
    rv.setLayoutManager(llm); 

    rv.setAdapter(adapter); 

    return rootView; 
} 


public void initializeAdapter(List<Ponuda> preuzetePonude){ 

    adapter = new RVAdapter(preuzetePonude); 

    //this isn't working 
    /*FragmentManager manager = getActivity().getSupportFragmentManager(); 
    android.support.v4.app.FragmentTransaction ft = manager.beginTransaction(); 
    ft.detach(this).attach(this).commit();*/ 

    //this is not working, neither 
    Fragment frg = getFragmentManager().findFragmentByTag("sve_ponude_fragment_tag"); 
    final android.support.v4.app.FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.detach(frg); 
    ft.attach(frg); 
    ft.commit(); 
} 

} 

あるMainActivityで

onDataLoaded機能まだですか?そして、データが読み込まれて別のアダプターに書き込まれ、使用されるとき。

答えて

0

設定する前にアダプタを初期化してください。アプローチを変更することに興味があれば、提案をすることができます:ArrayListを渡すことができるフラグメントのコンストラクタを作成します。 OnCreateまたはOnCreateViewを使用すると、アダプタを初期化してリストを渡すことができます。アダプタnotifyDataChangesを設定し、データがあるかどうかを確認した後、データを渡すときとデータを渡す前に、いくつかのログを使用してください。アダプターまたはフラグメントを直接制御してデータを管理しないでください。私は断片+ RecyclerViewを使ってもっと学ぶことをお勧めします。私はあなたが見ることができる一つの例を掲示していますが、断片の中のデータの読み込みです。

public class CategoryFragment extends Fragment { 

//Class Tag 
private static final String TAG = CategoryFragment.class.getSimpleName(); 
//Fragments base context 
private Context mContext; 
//RecyclerView widget 
private RecyclerView mRecyclerView; 
//RecyclerView's Layout Manager 
private RecyclerView.LayoutManager mLayourManager; 
//RecyclerView's Adapter 
private CategoryFragmentAdapter mCategoryFragmentAdapter; 
//Category Data List 
private ArrayList<Category> mCategoryList; 
//Interface object 
onCategoryItemClick mCallBackCategory; 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    //Instantiate base context 
    mContext = context; 
    //Instantiate interface 
    mCallBackCategory = (onCategoryItemClick)getActivity(); 
} 

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //Instantiate Category List 
    mCategoryList = new ArrayList<Category>(); 
} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 
    //Custom fragment view instantiating 
    View view_fragment_category = inflater.inflate(R.layout.fragment_items, container, false); 
    //Instantiating Fragment's recycler view 
    mRecyclerView = (RecyclerView) view_fragment_category.findViewById(R.id.recycle_categories); 
    //Instantiate RecycleView's Layout Manager: LinearLayoutManager is one of the default 
    mLayourManager = new LinearLayoutManager(mContext); 
    //Setting layout manager for recycler view 
    mRecyclerView.setLayoutManager(mLayourManager); 
    //Retrieve data from server, populate the category data list and set the RecyclerView's adapter 
    getCategories(); 
    //Instantiate the adapter and push the data 
    mCategoryFragmentAdapter = new CategoryFragmentAdapter(mContext, mCategoryList); 

    //RecyclerView item click listener 
    mCategoryFragmentAdapter.SetOnItemClickListener(new CategoryFragmentAdapter.OnItemClickListener() { 

     @Override 
     public void onItemClick(View v , int position) { 
      //Test display 
      //Toast.makeText(mContext, mCategoryList.get(position).getId(),Toast.LENGTH_LONG).show(); 

      //Push to Activity method with clicked item ID 
      mCallBackCategory.proceedToProducts(mCategoryList.get(position).getId()); 

     } 
    }); 

    return view_fragment_category; 
} 
関連する問題