Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FragmentPagerAdapter内片段内的列表视图_Java_Android_Listview_Android Listview_Android Fragments - Fatal编程技术网

Java FragmentPagerAdapter内片段内的列表视图

Java FragmentPagerAdapter内片段内的列表视图,java,android,listview,android-listview,android-fragments,Java,Android,Listview,Android Listview,Android Fragments,我对如何在通过FragmentPagerAdapter控制的片段中实现ListView感到非常困惑 目前,我正试图返回一些JSON数据,并根据JSON中的值将数据分为3个单独的列表;'贷款、预订和预订。这就像TeamTreehouse的练习“构建博客阅读器Android应用程序”,我试图在此基础上进行扩展,以进一步学习Android 当我尝试实现片段时,我开始出现问题。据我所知,片段是具有自己活动生命周期的可重用元素,因此实现一个包含所有逻辑的片段,然后使用FragmentPagerAdapte

我对如何在通过FragmentPagerAdapter控制的片段中实现ListView感到非常困惑

目前,我正试图返回一些JSON数据,并根据JSON中的值将数据分为3个单独的列表;'贷款、预订和预订。这就像TeamTreehouse的练习“构建博客阅读器Android应用程序”,我试图在此基础上进行扩展,以进一步学习Android

当我尝试实现片段时,我开始出现问题。据我所知,片段是具有自己活动生命周期的可重用元素,因此实现一个包含所有逻辑的片段,然后使用FragmentPagerAdapter简单地将我需要的信息拉到单独的列表中似乎是完美的。唯一的问题是没有显示ListView,尽管信息是在LogCat中提取的。我花了好几天的时间阅读和研究这个问题,我认为这可能与我如何在片段中实现我的ListView有关,但我确实需要一些帮助

我已经包含了我称为“LoanFragment”的片段类的代码,以及FragmentPagerAdapter“LibraryPagerAdapter”和我称为FragmentPagerAdapter的“Library”类的代码:

public class LoanFragment extends Fragment {

    ListView lv;
    private final String KEY_TITLE = "Title";
    private final String KEY_AUTHOR = "Author";
    public static final String TAG = Library.class.getSimpleName();
    protected JSONArray mTasksData; 
    SessionManager session; 

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.booked_fragment, container, false);

        lv = (ListView) rootView.findViewById(R.id.listMe);

        bindListView();

        return rootView;

    }

    public void bindListView() {
        new GetLibraryInformation(getActivity(),lv).execute("");
     }


    class GetLibraryInformation extends AsyncTask<Object, Void, JSONArray> {
        ListView mListView;
        Activity mContext;


        public GetLibraryInformation(Activity context,ListView gview) {
                    this.mListView=gview;
                    this.mContext=context;
            }

        @Override
        protected JSONArray doInBackground(Object... params) {
            JSONArray jsonResponse = null;

            // Get JSON data, all coming through fine
        }


        @Override
        protected void onPostExecute(JSONArray result) {        
            mTasksData = result;
            String[] keys = { KEY_TITLE, KEY_AUTHOR };
            int[] ids = { android.R.id.text1, android.R.id.text2 };
            String author = "";
            String title = "";
            List<HashMap<String, String>> fetch2 = new ArrayList<HashMap<String, String>>();

            if(mTasksData == null) {

            }
            else {
                try {
                    for (int i = 0; i < mTasksData.length(); i++) {     
                        JSONObject task = mTasksData.getJSONObject(i);

                        if(task.has(KEY_TITLE)) {                       
                            title = task.getString(KEY_TITLE);
                        }
                        else {
                            title = "Title not set.";
                        }   

                        if(task.has(KEY_AUTHOR)) {                      
                            author = task.getString(KEY_AUTHOR);
                        }
                        else {
                            author = "Author not set.";
                        }                       

                        HashMap<String, String> libraryInfo = new HashMap<String, String>();
                        libraryInfo = new HashMap<String, String>();
                        libraryInfo.put(KEY_TITLE, title);
                        libraryInfo.put(KEY_AUTHOR, author);

                        fetch2.add(libraryInfo);

                    }

                    SimpleAdapter adapter = new SimpleAdapter(getActivity(), fetch2, android.R.layout.simple_list_item_2, keys, ids);   

                    lv.setAdapter(adapter);
                }
                catch(JSONException e) {
                    Log.e(TAG, "Exception caught! ", e);
                }
            }

        }
    }       
}
和我的图书馆,扩展碎片活动:

public class Library extends FragmentActivity implements ActionBar.TabListener {

    private ViewPager viewPager;
    private LibraryPagerAdapter mAdapter;
    private ActionBar actionBar;

    private String[] tabs = { "Loan", "Reservation", "Booked" };

    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_library);

        viewPager = (ViewPager) findViewById(R.id.pager);
        actionBar = getActionBar();
        mAdapter = new LibraryPagerAdapter(getSupportFragmentManager());

        viewPager.setAdapter(mAdapter);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);        

        for (String tab_name : tabs) {
            actionBar.addTab(actionBar.newTab().setText(tab_name).setTabListener(this));
        }

        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {
                // on changing the page
                // make respected tab selected
                actionBar.setSelectedNavigationItem(position);
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        }); 
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.tasks, menu);
        return true;
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub
        viewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub

    }



}
最后是“booked_fragment.xml”,我正试图使用它来显示ListView:

FragmentPagerAdapter都使用相同的片段导入android.support.v4.app.Fragment,但是应用程序,除了存在的选项卡之外,只是返回完全空白

任何帮助都将不胜感激,因为我已经开始变成萝卜了

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:orientation="vertical"
    android:background="#ffffff"
    android:layout_height="fill_parent" >        

     <ListView android:id="@+id/listMe"
               android:layout_width="fill_parent"
               android:layout_height="0dp"
               android:background="#f9f9f9"
               android:layout_weight="1"
               android:drawSelectorOnTop="false"
               />


</LinearLayout> 

这是对要传递给SimpleAdapter的布局的误解。 在对构造函数上下文的调用中,List>data,int-resource,String[]from,int[]to需要传递列表项的布局,而不是包含ListView本身的布局。
当项目显示在ListView中并动态添加时,SimpleAdapter希望知道并传递此布局。如果您将其与表进行比较,例如:您使用的布局定义了表的布局,列表项的布局定义了该表中一行的外观。

谢谢您,Peter,我刚刚注意到我现在把它放错了,并对其进行了编辑,因此它现在使用的不是预定的片段而是androids simple\u list\u item\u 2,但是列表仍然没有显示:/您可以发布简单的\u列表\u项目\u 2.xml吗?请确保取2.5码!=确实,android.R.layout.simple_list_item_2.xml的源代码位于这里:fetch2在logcat中肯定不是空的。非常感谢。fetch2在logcat中是这样的:fetch2[{Author=线索状态,Title=简介},{Author=鲍里斯·兰登,Title=阿甘正传2:觉醒},{Author=作者未设定,Title=圣女贞德}]抱歉浪费你的时间,彼得,出于某种原因,文本在白色背景下默认为白色:我现在觉得很愚蠢
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:orientation="vertical"
    android:background="#ffffff"
    android:layout_height="fill_parent" >        

     <ListView android:id="@+id/listMe"
               android:layout_width="fill_parent"
               android:layout_height="0dp"
               android:background="#f9f9f9"
               android:layout_weight="1"
               android:drawSelectorOnTop="false"
               />


</LinearLayout>