1

둘러 보았지만 해결 방법을 찾지 못했지만 이것이 최후의 수단입니다.조각/뷰 페이지에 다른 데이터를 설정하는 방법

저는 Xamarin-Android 프로젝트에서 작업 중이며 하나의 조각으로 된 뷰 페이지가 있습니다. 이 단편의 트릭은 단 하나의 단편이지만 필요한 수에 따라이 단편의 인스턴스를 많이로드하지만 각 단편은 한 오브젝트 (한 세트의 데이터)를로드해야한다는 점입니다. 내가 가진 문제는 반환 된 항목 (파일에서로드 된) 목록을 반복 할 때 분명히 모든 것을 반복하고 반환 된 데이터 집합을 내 조각으로 설정한다는 것입니다. 이것은 내가 같은 데이터를 가진 많은 단편들을 갖게한다. 필요한 것은 각 조각에 마지막 세트를로드하는 대신 한 세트의 데이터를로드하는 것입니다. 본질적으로 많은 인스턴스를로드하고 각 인스턴스가 하나의 오브젝트 데이터를 표시해야하는 단편이 있습니다. 어떻게해야합니까?

미리 도움을 청하십시오.

좋아, 아래를 참조하십시오 - 이것은 조각 클래스입니다. 나는 조각의 OnCreateView를 생략했다. 단편 리소스 만 팽창시키고 textviews를 얻는다. FragmentPagerAdapter 코드가 필요한지 알려주기 바란다. 이 하나의 조각에는 Count 및 GetItem overidden 메서드의 FragmentPagerAdapter 클래스에서 설정되는 많은 인스턴스가 있습니다. Count는 필요한 인스턴스의 수를 반환하고 "ThisFragment.newInstance (position); return"을 수행하는 GetItem을 반환합니다.

편집 : 코드는 새로운 조각을 만들 수있는 'FragmentPagerAdapter'의 책임이어야합니다 솔루션

private int mNum; 
private string code, status; 
TextView textviewMyObjectCode, textviewMyObjectStatus; 

public static ThisFragment newInstance(int num) 
{ 
    ThisFragment myFragment = new ThisFragment(); 
    MyObject myObject = new MyObject(); 

    List<MyObject> myObjectList = MyObjectIO.LoadMyObjectsFromFile(); 

    myObject.MyObjectNumber = myObjectList[num].MyObjectNumber; 
    myObject.MyObjectStatus = myObjectList[num].MyObjectStatus; 

    args.PutInt("num", num); 
    args.PutString("objectCode", myObject.MyObjectNumber); 
    args.PutString("objectStatus", myObject.MyObjectStatus); 

    myFragment.Arguments = args; 

    return thisFragment; 
} 

public override void OnCreate(Bundle savedInstanceState) 
{ 
    base.OnCreate(savedInstanceState); 
    mNum = Arguments != null ? Arguments.GetInt("num") : 1; 
    code = Arguments.GetString("objectCode"); 
    status = Arguments.GetString("objectStatus");   
} 

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     if (container == null) 
     { 
     return null; 
     } 

     View thisView = inflater.Inflate(Resource.Layout.object_fragment, container, false); 

     textviewObjectStatus = thisView.FindViewById<TextView>(Resource.Id.textviewObjectStatus); 
     textviewObjectCode = thisView.FindViewById<TextView>(Resource.Id.textviewObjectCode); 

     textviewObjectCode.Text = code; 
     textviewObjectStatus.Text = status; 

     return thisView; 
    } 
+0

솔루션을 제안하기가 어렵다면 코드를 게시해야합니다. – Jay

+0

빠른 응답을 보내 주셔서 감사합니다. 전체 프로젝트 코드 또는 파일에서 데이터를 가져 와서 단편에로드하는 스 니펫 만 필요합니까? – darkniz

+0

전체 프로젝트가 아닙니다. 단편을 다루는 코드 스 니펫 만 있습니다. – Jay

답변

0

나는 그것을 알아낼 수 있었다. "num"이라는 위치 변수가 들어있는 newInstance 메서드를 사용하고 있으며 LoadObjectsFromFile 메서드에서 개체 목록을 가져와 특정 개체를 특정 조각에 할당 할 수 있습니다. 예 : 개체 [0]을 조각 [0]에로드 할 수 있습니다. newInstance 메서드에서이 작업을 수행하고 값을 Bundle로 설정 한 다음 나중에 OnCreate에서 검색합니다. 그런 다음 OnCreateView에서 값을 내 textviews에 배치 할 수 있습니다. @ 제이, 나는 이제 네가 무엇을 말하고 있는지 깨닫는다. 처음에는 클릭하지 않았습니다.

0

업데이트. 이 책임을 올바른 접근 방식이 아닌 Fragment 클래스에 위임 한 것 같습니다. 여기서 'textviewMyObjectCode'와 'textviewMyObjectStatus'의 텍스트를 반복하여 반복 설정하므로이 값은 루프 반복마다 무시됩니다. 이상적으로 'newInstance'의 'MyObjectList'에 액세스하고 'num'에 전달 된 인덱스별로 Bundle 개체의 값을 설정해야합니다. 또한 'newInstance'는 'FragmentPagerAdapter'에 속해야하며 'MyObjectList'는 'FragmentPagerAdapter'에 사용할 수 있어야합니다.

'ThisFragment'가 ViewPager에 포함되어야하는 조각 인 경우 해당 조각은 번들에서 데이터를 검색하고 필요한 데이터를 해당 자원으로 설정하는 작업을 수행해야합니다.

+0

고마워요 :) 내일 볼게 내가 거기에서해야 할 일을 볼 수 있습니다. – darkniz

+0

나는 아직도이 문제를 가지고있다. 누구나 내가 도와 줄 수있는 코드를 공유 할 수 있습니까? (미안, 나는 멍청이야.) – darkniz

관련 문제