2012-04-24 21 views
6

Tôi có một tình huống cho kịch bản app.The android của tôi là tôi đang sử dụng một bộ chuyển đổi viewpage whering Tôi có 3 trang mà thực sự là fragments.My vấn đề là tôi muốn cập nhật các hoạt động này từ hoạt động của hộp thoại. Hoạt động của hộp thoại tiếp tục danh sách từ sự kiện onclick mà tôi muốn cập nhật phân đoạn.Làm thế nào để làm mới một mảnh trong một viewpageadapter thông qua một hoạt động khác

Trước hết là có thể nếu có, hãy làm chip và giúp tôi.

Cheers Gaurav

Đây là trang điểm của tôi adaptor

/* 
* 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

Bộ điều hợp trang xem của bạn ở đâu ?. Bạn có thể đăng một số mã của hoạt động chứa người xem không ?. – gutiory

+0

Hi @gutiory sẽ dán mã một lần trở về nhà, thực sự là jist là tôi đang sử dụng thư viện ViewPagerIndicator của Jake.https: //github.com/JakeWharton/Android-ViewPagerIndicator với các đoạn được thêm vào từ fragmentpageadapter .Shall đăng mã ngay Tôi trở lại. –

+0

Đây là bộ điều hợp trang xem của tôi –

Trả lời

1

(tín dụng cho blahdiblah rui.araujo) Có một số cách để đạt được điều này.

Tùy chọn đầu tiên dễ dàng hơn, nhưng bit kém hiệu quả hơn.

Override getItemPosition trong bạn PagerAdapter như thế này:

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

Bằng cách này, khi bạn gọi notifyDataSetChanged(), quan điểm pager sẽ loại bỏ tất cả các quan điểm và tải lại tất cả. Như vậy hiệu ứng tải lại được lấy.

Tùy chọn thứ hai, suggested by alvarolb, là phương pháp setTag() trong instantiateItem() khi khởi tạo chế độ xem mới. Sau đó, thay vì sử dụng notifyDataSetChanged(), bạn có thể sử dụng findViewWithTag() để tìm chế độ xem bạn muốn cập nhật.

Cách tiếp cận thứ hai rất linh hoạt và có hiệu suất cao. Kudos để alvarolb cho nghiên cứu ban đầu.

Các vấn đề liên quan