Android Studio 中的 ListFragment

Posted

技术标签:

【中文标题】Android Studio 中的 ListFragment【英文标题】:ListFragment in Android Studio 【发布时间】:2015-05-20 21:09:26 【问题描述】:

我正在浏览在线教程,试图了解 ListFragment 的工作原理以及我们如何使用它。

教程有点模糊,我无法理解它是如何工作的,也无法在 android Studio 上实现 ListFragment。

谁能提供有关 ListFragment 工作原理以及如何在 Android Studio 上实现它的详细信息。

另外,如何在不使用 ListFragment 的情况下在片段内定义 ListView?

【问题讨论】:

【参考方案1】:

关于最后一个问题:

另外,如何在不使用 ListFragment 的情况下在片段内定义 ListView?

我有可能有帮助的代码。

这里是 MainActivity.java,其中包括一个 Fragment:

    public class MainActivity extends ActionBarActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState == null) 
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new MusicFragment())
                    .commit();
        
    


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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) 
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) 
            Intent i = new Intent(this, SettingsActivity.class);
            startActivity(i);
            return true;
        

        return super.onOptionsItemSelected(item);
    

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class MusicFragment extends Fragment 

        ListView list;
        String[] text =  "House of Whispers","Hot Lunch", "Number of the Beast", "Killers";
        Integer[] imageId =  R.drawable.hotlunch1, R.drawable.hotlunch2,
                R.drawable.ironmaiden1, R.drawable.ironmaiden2 ;

        public MusicFragment() 
        

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

            list = (ListView) rootView.findViewById(R.id.ListView);
            CustomAdapter adapter = new CustomAdapter(getActivity() , text, imageId );
            list.setAdapter(adapter);

            Log.d("CustomAdapter", "MusicFragment onCreateView successful");

            return rootView;
        

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


        

    

fragment_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_
    android:layout_ android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity$PlaceholderFragment">

    <ListView
        android:id="@+id/ListView"
        android:layout_
        android:layout_ >
    </ListView>

</RelativeLayout>

编辑:根据要求,这里是 CustomAdapter:

public class CustomAdapter extends ArrayAdapter<String> 
    private final Activity _context;
    private final String[] _text;
    private final Integer[] _imageId;

    public CustomAdapter(Activity context, String[] text, Integer[] imageId) 
        super(context, R.layout.list_item, text);
        this._context = context;
        this._text = text;
        this._imageId = imageId;
    

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

        LayoutInflater inflater = _context.getLayoutInflater();
        View rowView = inflater.inflate(R.layout.list_item, null, true);
        TextView txtTitle = (TextView) rowView.findViewById(R.id.text);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
        txtTitle.setText(_text[position]);
        imageView.setImageResource(_imageId[position]);

        return rowView;
    


【讨论】:

MusicFragment 类是否创建在项目中声明的单独 Fragment 中?还是它是 MainActivity 的一部分? 能否提供 cmets 中“自定义适配器”的代码? @Arjun Issar,看看更新后的答案,我还包含了完整项目的链接。本例中的 Fragment 位于 MainActivity 类中。【参考方案2】:

ListFragment 与 ListActivity 相同 - 它只是一个 Fragment,它扩展了 List 方法。您可以只添加包含 ListView 的 Fragment 并实现列表方法所需的所有方法,例如在 Activity 中。 你可以找到一个很好的教程here,它解释了如何使用它。

【讨论】:

以上是关于Android Studio 中的 ListFragment的主要内容,如果未能解决你的问题,请参考以下文章

大神, 我的android studio中的虚拟机怎么联网?

android studio怎样运行打包后的apk

无法按照 Google“入门”页面中的说明在 Android Studio 中添加地图; Android Studio 报错

android studio 怎么添加module

android studio application怎么创建

android - android studio中的proguard错误