带有Fragment和ListFragment类

时间:2016-06-26 20:57:13

标签: android listview android-fragments

我有ListView根据我的片段布局显示项目。该列表是可见的,已填充并使用所需的片段布局。然而,我的ListFragment类似乎没有被加载。我显然忽视了一些事情。

我的适配器具有以下覆盖:

@Override public View getView( int position, View convertView, ViewGroup parent )
{
    // Get the data item for this position
    SMSConversation conversation = getItem( position );

    // Check if an existing view is being reused, otherwise inflate the view
    if( convertView == null ) {
        convertView = LayoutInflater.from( getContext() ).inflate( R.layout.fragment_main, parent, false );
    }

    return convertView;
}

我的ListFragment布局如下:

<LinearLayout
    android:id="@+id/main"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".ui.MainActivity"
    >

    <ImageView
        android:id="@+id/image_contact"
        android:layout_width="45dp"
        android:layout_height="45dp"
        android:layout_gravity="center_vertical"
        android:layout_marginEnd="15dp"
        android:maxHeight="45dp"
        android:maxWidth="45dp"
        android:minHeight="45dp"
        android:minWidth="45dp"
        android:src="@drawable/image_contact"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tvNumber"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Number"/>

        <TextView
            android:id="@+id/tvMessage"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Message"/>
    </LinearLayout>

</LinearLayout>

我的ListFragment类如下(检查日志命令,没有触发它们):

public class FragmentMain extends ListFragment
{
    @Override public View onCreateView(
        LayoutInflater inflater,
        ViewGroup container,
        Bundle savedInstanceState
    ) {
        Log.i( "Fragment Main:", "onCreateView fired" );
        super.onCreateView( inflater, container, savedInstanceState );

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

    public void onCreate( Bundle savedInstanceState )
    {
        Log.i( "Fragment Main:", "onCreate fired" );
        super.onCreate( savedInstanceState );
    }

    @Override public boolean onOptionsItemSelected( MenuItem item )
    {
        Log.i( "Fragment Main:", "onOptionsItemSelected fired" );
        return super.onOptionsItemSelected( item );
    }

    @Override public void onListItemClick( ListView l, View v, int position, long id )
    {
        Log.i( "Fragment Main:", "onListItemClick fired" );
        super.onListItemClick( l, v, position, id );
    }

    @Override public boolean onContextItemSelected( MenuItem item )
    {
        Log.i( "Fragment Main:", "onContextItemSelected fired" );
        return super.onContextItemSelected( item );
    }
}

我想要完成的结果是我的班级FragmentMain会处理点击并长按列表的片段。

我最好的选择是我在适配器中以错误的方式给片段充气。但是,我无法找到解决方案。

修改

我做了一些阅读并发现了这篇文章: Can a ListView contain Fragments

在评论中,一些用户正在解释为什么使用Fragments作为列表项可能是一个坏主意。因为我可以膨胀任何视图而不使用片段,所以我可能不会使用my ListFragment类,只能在我的适配器类中注册和处理click或long-click事件。我想分离负责处理从实际适配器点击或长按的代码,这就是我开始使用片段作为list-items的原因。有没有其他方法可以将逻辑分开?

0 个答案:

没有答案