سؤال

When i run my app everything runs perfectly until i select the third tab that consist the listfragment i made so it displays a listview with data and image, once it is selected the app just gives the normal message unfortunately the app stopped working and logcat sends a lot of red errors.

03-06 01:44:23.200: D/dalvikvm(879): GC_FOR_ALLOC freed 99K, 6% free 3113K/3280K, paused 57ms, total 59ms
03-06 01:44:23.410: D/dalvikvm(879): GC_FOR_ALLOC freed 20K, 5% free 3143K/3280K, paused 20ms, total 21ms
03-06 01:44:23.410: I/dalvikvm-heap(879): Grow heap (frag case) to 3.811MB for 709972-byte allocation
03-06 01:44:23.450: D/dalvikvm(879): GC_FOR_ALLOC freed <1K, 4% free 3836K/3976K, paused 33ms, total 33ms
03-06 01:44:23.530: D/(879): HostConnection::get() New Host Connection established 0xb7a51a38, tid 879
03-06 01:44:23.690: W/EGL_emulation(879): eglSurfaceAttrib not implemented
03-06 01:44:23.700: D/OpenGLRenderer(879): Enabling debug mode 0
03-06 01:44:35.760: D/AndroidRuntime(879): Shutting down VM
03-06 01:44:35.760: W/dalvikvm(879): threadid=1: thread exiting with uncaught exception (group=0xb4aa8ba8)
03-06 01:44:35.810: E/AndroidRuntime(879): FATAL EXCEPTION: main
03-06 01:44:35.810: E/AndroidRuntime(879): Process: com.TIPA.uips, PID: 879
03-06 01:44:35.810: E/AndroidRuntime(879): java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.support.v4.app.ListFragment.ensureList(ListFragment.java:344)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.support.v4.app.ListFragment.onViewCreated(ListFragment.java:145)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:941)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:550)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:509)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:490)
03-06 01:44:35.810: E/AndroidRuntime(879):  at com.TIPA.uips.MainActivity.onTabSelected(MainActivity.java:71)
03-06 01:44:35.810: E/AndroidRuntime(879):  at com.android.internal.app.ActionBarImpl.selectTab(ActionBarImpl.java:577)
03-06 01:44:35.810: E/AndroidRuntime(879):  at com.android.internal.app.ActionBarImpl$TabImpl.select(ActionBarImpl.java:1105)
03-06 01:44:35.810: E/AndroidRuntime(879):  at com.android.internal.widget.ScrollingTabContainerView$TabClickListener.onClick(ScrollingTabContainerView.java:547)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.view.View.performClick(View.java:4438)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.view.View$PerformClick.run(View.java:18422)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.os.Handler.handleCallback(Handler.java:733)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.os.Handler.dispatchMessage(Handler.java:95)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.os.Looper.loop(Looper.java:136)
03-06 01:44:35.810: E/AndroidRuntime(879):  at android.app.ActivityThread.main(ActivityThread.java:5017)
03-06 01:44:35.810: E/AndroidRuntime(879):  at java.lang.reflect.Method.invokeNative(Native Method)
03-06 01:44:35.810: E/AndroidRuntime(879):  at java.lang.reflect.Method.invoke(Method.java:515)
03-06 01:44:35.810: E/AndroidRuntime(879):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-06 01:44:35.810: E/AndroidRuntime(879):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-06 01:44:35.810: E/AndroidRuntime(879):  at dalvik.system.NativeStart.main(Native Method)
03-06 01:44:39.230: I/Process(879): Sending signal. PID: 879 SIG: 9

The main thing that i changed in this class was it use to be extends Fragment to extends ListFragment i believe this is creating the error although not sure how?

package com.TIPA.uips;

import com.TIPA.uips.R;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.content.Context;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class FriendsList extends ListFragment {

     public class MyListAdapter extends ArrayAdapter<String> {

      Context myContext;

      public MyListAdapter(Context context, int textViewResourceId,
        String[] objects) {
       super(context, textViewResourceId, objects);
       myContext = context;
      }

      @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.carrottop);
       label.setText(month[position]);
       ImageView icon=(ImageView)row.findViewById(R.id.dp);

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

       return row;
      }

     }

     String[] month ={
       "^Smithy", 
       "^Kreso", 
       "^Chen", 
       "^Dave"
     };

     @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);
      */
      MyListAdapter myListAdapter = 
        new MyListAdapter(getActivity(), R.layout.row, month);
      setListAdapter(myListAdapter);
     }

     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
       Bundle savedInstanceState) {
      return inflater.inflate(R.layout.friends_list, container, false);
     }

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

    }

This here is the adapter to allow the fragments to return the values of each class believing it is not allowing it.

package com.TIPA.uips;

import com.TIPA.uips.NewsFeed;
import com.TIPA.uips.Chat;
import com.TIPA.uips.FriendsList;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class TabsPagerAdapter extends FragmentPagerAdapter {

    public TabsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int index) {

        switch (index) {
        case 0:
            // Top Rated fragment activity
            return new NewsFeed();
        case 1:
            // Games fragment activity
            return new Chat();
        case 2:
            // Movies fragment activity
            return new FriendsList();
        }

        return null;
    }

    @Override
    public int getCount() {
        // get item count - equal to number of tabs
        return 3;
    }

}

Cheers

UPDATE:

New error occuring when implemented listview in xml with id/list.

03-06 02:47:59.780: D/dalvikvm(858): Not late-enabling CheckJNI (already on)
03-06 02:48:02.290: D/dalvikvm(858): GC_FOR_ALLOC freed 95K, 6% free 3117K/3284K, paused 52ms, total 54ms
03-06 02:48:02.510: D/dalvikvm(858): GC_FOR_ALLOC freed 19K, 5% free 3143K/3284K, paused 31ms, total 32ms
03-06 02:48:02.510: I/dalvikvm-heap(858): Grow heap (frag case) to 3.815MB for 709972-byte allocation
03-06 02:48:02.550: D/dalvikvm(858): GC_FOR_ALLOC freed <1K, 4% free 3836K/3980K, paused 29ms, total 29ms
03-06 02:48:02.640: D/(858): HostConnection::get() New Host Connection established 0xb74f2a38, tid 858
03-06 02:48:02.750: W/EGL_emulation(858): eglSurfaceAttrib not implemented
03-06 02:48:02.760: D/OpenGLRenderer(858): Enabling debug mode 0
03-06 02:48:07.920: D/AndroidRuntime(858): Shutting down VM
03-06 02:48:07.920: W/dalvikvm(858): threadid=1: thread exiting with uncaught exception (group=0xb4a74ba8)
03-06 02:48:07.940: E/AndroidRuntime(858): FATAL EXCEPTION: main
03-06 02:48:07.940: E/AndroidRuntime(858): Process: com.TIPA.uips, PID: 858
03-06 02:48:07.940: E/AndroidRuntime(858): java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.support.v4.app.ListFragment.ensureList(ListFragment.java:344)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.support.v4.app.ListFragment.onViewCreated(ListFragment.java:145)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:941)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:550)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:509)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:490)
03-06 02:48:07.940: E/AndroidRuntime(858):  at com.TIPA.uips.MainActivity.onTabSelected(MainActivity.java:71)
03-06 02:48:07.940: E/AndroidRuntime(858):  at com.android.internal.app.ActionBarImpl.selectTab(ActionBarImpl.java:577)
03-06 02:48:07.940: E/AndroidRuntime(858):  at com.android.internal.app.ActionBarImpl$TabImpl.select(ActionBarImpl.java:1105)
03-06 02:48:07.940: E/AndroidRuntime(858):  at com.android.internal.widget.ScrollingTabContainerView$TabClickListener.onClick(ScrollingTabContainerView.java:547)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.view.View.performClick(View.java:4438)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.view.View$PerformClick.run(View.java:18422)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.os.Handler.handleCallback(Handler.java:733)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.os.Handler.dispatchMessage(Handler.java:95)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.os.Looper.loop(Looper.java:136)
03-06 02:48:07.940: E/AndroidRuntime(858):  at android.app.ActivityThread.main(ActivityThread.java:5017)
03-06 02:48:07.940: E/AndroidRuntime(858):  at java.lang.reflect.Method.invokeNative(Native Method)
03-06 02:48:07.940: E/AndroidRuntime(858):  at java.lang.reflect.Method.invoke(Method.java:515)
03-06 02:48:07.940: E/AndroidRuntime(858):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-06 02:48:07.940: E/AndroidRuntime(858):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-06 02:48:07.940: E/AndroidRuntime(858):  at dalvik.system.NativeStart.main(Native Method)
03-06 02:48:09.880: I/Process(858): Sending signal. PID: 858 SIG: 9

Friends_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>
هل كانت مفيدة؟

المحلول

You need to have a listview with id as below in friends_list.xml

<ListView android:id="@android:id/list"

Whatever applies to ListActivity applies to ListFragment. More info @

Quoting docs

ListActivity has a default layout that consists of a single, full-screen list in the center of the screen. However, if you desire, you can customize the screen layout by setting your own view layout with setContentView() in onCreate(). To do this, your own view MUST contain a ListView object with the id "@android:id/list" (or list if it's in code)

So if you inflate a layout in ListFragment you need to have a ListView with the id @android:id/list in the fragments layout.

Edit:

Notice android:id="@+id/list" vs android:id="@android:id/list". I suggested android:id="@android:id/list"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top