0

는 I는 ListFragmentListView 표시해야 처음 세 네 개의 필드를 각각 갖는 MyClass 클래스의 객체 (즉 firstItem, secondItem, thirdItemfourthItem)의 ArrayList있다. 다음과 같이이를 위해 는, 나는 ArrayAdapter 확장, 그 getView() 방법을 재정의 :Android onListItemClick : 클릭 한 ListView 항목에 필드가 표시되는 개체를 가져 오는 방법은 무엇입니까?

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view; 

    if (convertView == null) { 
     view = layoutInflater.inflate(
       R.layout.myFragment_listview_item, parent, false); 
    } else { 
     view = convertView; 
    } 

    MyClass myClassItem = getItem(position);//******But this method is inside Adapter 

    ((TextView) view 
      .findViewById(R.id.myclassListFragment_ListViewItem1)) 
      .setText(myClassItem.firstItem); 
    ((TextView) view 
      .findViewById(R.id.myclassListFragment_ListViewItem2)) 
      .setText(myClassItem.secondItem); 
    ((TextView) view 
      .findViewById(R.id.myclassListFragment_ListViewItem3)) 
      .setText(myClassItem.thirdItem); 

    return view; 
} 

을하지만 사용자는 ListView에서 항목, 다른 필드 표시되는 개체에 대한 fourthItem 필드를 클릭 할 때 클릭 된 목록보기 항목은 Fragment (detailsFragment)으로 표시되어야합니다 (TextView). , 다음하지만 문제는 내가 ListView 항목을 해당 MyClass 객체 누구를위한 fourthItem 필드의 값을 얻는 방법으로 클릭했던 것을 그대로

이 프로그램은 ListView에서 항목의 클릭에 새로운 조각을 추가 사용자, TextViewdetailsFragment에 설정할 수 있도록 하시겠습니까? MyClass 개체를 포함 ListLoaderManager.LoaderCallBacksonLoadFinished() 메소드로 전달되는 것을 의미

ListFragment 구현 LoaderManager.LoaderCallBacks<List<MyClass>>, : 제 ListFragment 언급에서

@Override 
    public void onLoadFinished(Loader<List<MyClass>> loader, List<MyClass> dataList) { 
     customArrayListAdapter.setData(dataList); 
     if (isResumed()) {setListShown(true);} else {setListShownNoAnimation(true);} 
    } 

우리 onListItemClick() 방법이 새 detailsFragmentfourthItem으로 표시되도록 인스턴스화합니다.

답변

3

항목에서

view.SetTag(myClassItem); 

사용 onItemClickListener에서 GetTag의()() 검색 데이터

설정이 어댑터의 종류 :

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    MyClass class = (MyClass)getListAdapter().getItem(position); 
} 
1

여러분의 견해를 기억하게 만드는 setTag()getTag() 메커니즘을 사용하면 개체가 정수 문자열 또는 원하는대로 될 수 있습니다. 의 getView() 당신은 getItem 메소드를 호출 해의 ListView에서 행 항목 객체를 선택받을 수

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    MyClass class = (MyClass) v.getTag(); 
} 
1

당신이 StringDetailsFragmentnewInstance()에 전달 된 매개 변수의 유형을 변경하고 단순히를 표시해야합니다 이후이

private void showDetailsFragment(int index) { 
    String fourthItem = ((MyClass)getListAdapter().getItem(index)).fourthItem; 
    DetailsFragment detailsFragment = DetailsFragment.newInstance(fourthItem); 
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.myActivity_frameLayout1, detailsFragment); 
    fragmentTransaction.commit(); 
} 

처럼 방법을 변경합니다.