2013-10-13 2 views
3

ListFragment에서 OnScrollListener 인터페이스를 구현했으며 목록의 마지막 요소가 표시 될 때 텍스트를 변경하려고하지만 작동하지 않습니다. 비슷한 문제 (ListFragment 내에서 OnScrollListener) 예제를 찾지 못했습니다. 내 예 :) 난에 유래에서 발견 onScroll 방법의은 ListFragment 내에서 OnScrollListener를 구현합니다.

P.S 구현을

public class MyListFragment1 extends ListFragment implements OnScrollListener { 
    public View view; 

public class MyListAdapter extends ArrayAdapter<String> { 
    Context myContext; 
    List<String> lista; 
    public MyListAdapter(Context context, int textViewResourceId, 
      List<String> objects) { 
     super(context, textViewResourceId, objects); 
     myContext = context; 
     lista = objects; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     //return super.getView(position, convertView, parent); 

     LayoutInflater inflater = 
       (LayoutInflater)myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View row=inflater.inflate(R.layout.row, parent, false); 
     TextView label=(TextView)row.findViewById(R.id.month); 
     label.setText(lista.get(position)); 
     ImageView icon=(ImageView)row.findViewById(R.id.icon); 

     //Customize your icon here 
     icon.setImageResource(R.drawable.ic_launcher); 

     return row; 
    } 



} 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    /* 
    ListAdapter myListAdapter = new ArrayAdapter<String>(
      getActivity(), 
      android.R.layout.simple_list_item_1, 
      month); 
    setListAdapter(myListAdapter); 
    */ 
    List<String> lista = new ArrayList<String>(); 

    lista.add("January"); 
    lista.add("February"); 
    lista.add("March"); 
    lista.add("April"); 
    lista.add("May"); 
    lista.add("June"); 
    lista.add("July"); 
    lista.add("August"); 
    lista.add("September"); 
    lista.add("October"); 
    lista.add("November"); 
    lista.add("December"); 

    MyListAdapter myListAdapter = 
      new MyListAdapter(getActivity(), R.layout.row, lista); 
    setListAdapter(myListAdapter); 

} 

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

    changeText("jestem tutaj"); 

    return view; 
} 
private void changeText(String txt){ 
    TextView nowy = (TextView)view.findViewById(R.id.article); 
    nowy.setText(txt); 
} 

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    Toast.makeText(
      getActivity(), 
      getListView().getItemAtPosition(position).toString(), 
      Toast.LENGTH_LONG).show(); 
} 
@Override 
public void onScroll(AbsListView view, int firstVisibleItem, 
     int visibleItemCount, int totalItemCount) { 

    if (++firstVisibleItem + visibleItemCount > totalItemCount) { 
     changeText("something"); 
    } 

} 

@Override 
public void onScrollStateChanged(AbsListView view, int scrollState) { 
    // TODO Auto-generated method stub 

} 

나는 그냥 작동하지 않습니다, 오류가 없습니다.

편집 : 추가/로그 캣 :

10-14 01:11:34.944: E/AndroidRuntime(817): FATAL EXCEPTION: main 
10-14 01:11:34.944: E/AndroidRuntime(817): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.exercise.AndroidListFragment/com.exercise.AndroidListFragment.AndroidListFragmentActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.os.Looper.loop(Looper.java:137) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.app.ActivityThread.main(ActivityThread.java:5041) 
10-14 01:11:34.944: E/AndroidRuntime(817): at java.lang.reflect.Method.invokeNative(Native Method) 
10-14 01:11:34.944: E/AndroidRuntime(817): at java.lang.reflect.Method.invoke(Method.java:511) 
10-14 01:11:34.944: E/AndroidRuntime(817): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
10-14 01:11:34.944: E/AndroidRuntime(817): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
10-14 01:11:34.944: E/AndroidRuntime(817): at dalvik.system.NativeStart.main(Native Method) 
10-14 01:11:34.944: E/AndroidRuntime(817): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fragment 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
10-14 01:11:34.944: E/AndroidRuntime(817): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.app.Activity.setContentView(Activity.java:1881) 
10-14 01:11:34.944: E/AndroidRuntime(817): at com.exercise.AndroidListFragment.AndroidListFragmentActivity.onCreate(AndroidListFragmentActivity.java:11) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.app.Activity.performCreate(Activity.java:5104) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
10-14 01:11:34.944: E/AndroidRuntime(817): ... 11 more 
10-14 01:11:34.944: E/AndroidRuntime(817): Caused by: java.lang.IllegalStateException: Content view not yet created 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.app.ListFragment.ensureList(ListFragment.java:386) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.app.ListFragment.getListView(ListFragment.java:280) 
10-14 01:11:34.944: E/AndroidRuntime(817): at com.exercise.AndroidListFragment.MyListFragment1.onCreateView(MyListFragment1.java:93) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.app.Fragment.performCreateView(Fragment.java:1695) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:861) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1137) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.app.Activity.onCreateView(Activity.java:4717) 
10-14 01:11:34.944: E/AndroidRuntime(817): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 
10-14 01:11:34.944: E/AndroidRuntime(817): ... 21 more 

편집 2 : 나는 시도 findViewById를하여 가지고 있지만 너무 작동하지 않습니다 ....

답변

9

당신은 OnScrollListener를 구현 한,하지만 당신은 첨부 havent 한 ListView.

getListView().setOnScrollListener(this); 

onCreateView 메서드에이를 추가하십시오.

+0

나는 그것을했지만 지금은 내 응용 프로그램이 "불행히도 응용 프로그램이 중지되었습니다", 내 게시물에 logcat을 추가했습니다. – bkowalczyyk

+0

잘 그 시점에서 그것을하지 말아야 할 것 같습니다. 난 그냥 단지 onResume 오버라이드 (override) –

+0

: 이력서에로 이동 "\t @Override를 \t 공공 무효 onResume() { \t super.onResume(); \t}"내 응용 프로그램은 에뮬레이터-5554의 연결이 끊어 취소 – bkowalczyyk

6

아직 작성되지 않은 경우 Listview에 액세스하려고하기 때문에이 오류가 발생합니다.

는에 의해 발생 : java.lang.IllegalStateException : 콘텐츠보기는 아직 귀하의 목록보기가 실제로 일반적으로 다음과 같이 보일 줄에서, 당신의 onCreateView 방법의 마지막 줄에 의해 만들어진

생성되지 :

return inflater.inflate(R.layout.fragment_list, container, false); 

해결 방법은 onCreateView 메소드 바로 다음에 실행되는 onActivityCreated 메소드에서 목록에 액세스하는 것입니다.

@Override 
    public void onActivityCreated (Bundle savedInstanceState){ 
     // Always call the superclass so it can save the view hierarchy state 
     super.onCreate(savedInstanceState); 

     getListView().setOnScrollListener(this); 
    } 
+0

매우 고마워요 선생님 :) –

관련 문제