2013-10-13 26 views
3

我在ListFragment中實現了OnScrollListener接口,並且我想在列表的最後一個元素可見時更改文本,但它不起作用。我沒有找到類似問題的示例(ListFragment內部的OnScrollListener)。我的例子:實現OnScrollListener裏面listFragment

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 

} 

我沒有任何錯誤,它只是不工作;)

onScroll方法我在StackOverflow上發現的P.S實施。

編輯:/添加的logcat:

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,但你還沒有連接它到你的ListView。

getListView().setOnScrollListener(this); 

將此內容添加到您的onCreateView方法中。

+0

我做到了,但現在我的應用程序得到「不幸的應用程序已停止」,我添加了一個logcat到我的文章。 – bkowalczyyk

+0

好吧,看起來你不應該這樣做。它移動到簡歷:) –

+0

我僅僅只覆蓋的onResume 「\t @覆蓋 \t公共無效的onResume(){ \t super.onResume(); \t}」 和我的應用程序得到」模擬器-5554斷開取消' – bkowalczyyk

6

你有這個錯誤,因爲你試圖訪問你的列表視圖,當這個還沒有創建。

產生的原因:java.lang.IllegalStateException:內容視圖尚未 創建

你的列表視圖實際上是由您的onCreateView方法的最後一行創建,在該行通常是這個樣子:

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

解決方案是從onActivityCreated方法訪問您的列表,該方法在onCreateView方法之後執行。

@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

非常感謝主席:) –