我有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的原因。有没有其他方法可以将逻辑分开?