使用自定义 ArrayAdapter 将浮动操作按钮添加到 ListFragment
Add Floating Action Button to ListFragment with a custom ArrayAdapter
我使用本指南创建了一个自定义 ListView,它解析来自 JSON 的数据。
https://www.bignerdranch.com/blog/customizing-android-listview-rows-subclassing/
我想向 ItemListFragment 添加一个浮动操作按钮,但不知道如何操作。
试着把它放在下面:
public ItemView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
LayoutInflater.from(context).inflate(R.layout.item_view_children, this, true);
setupChildren();
}
但是我不想要的每个项目都会显示它。
这是包含完整示例的代码:
知道怎么做吗?
尝试修改 inflate 但无效:
public static ItemView inflate(ViewGroup parent) {
ItemView itemView = (ItemView)LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_view, parent, false);
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
FloatingActionButton fab = (FloatingActionButton) inflater.inflate(R.layout.fab_view, parent, false);
return itemView;
}
编辑:
如果我把它放在构造函数下,它就可以正常工作。但是因为每个视图都会多次调用构造函数,所以我必须找到一种只调用一次的方法。
public ItemView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
LayoutInflater.from(context).inflate(R.layout.item_view_children, this, true);
LayoutInflater.from(context).inflate(R.layout.fab_view, this, true);
setupChildren();
}
将此代码添加到您的 XML 布局文件中,它将显示在右下角。
<android.support.design.widget.FloatingActionButton android:id="@+id/fab"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_menu_camera" />
然后在你的片段中class你可以用这个代码调用它
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//put your code here
}
});
终于找到解决办法了。比我想的要简单得多。
扩展 ListFragment onCreateView 方法的 ItemListFragment 调用覆盖的方法。
所以替换:
View v = super.onCreateView(inflater, container, savedInstanceState);
与:
View v = inflater.inflate(R.layout.list_view, null);
成功了!
还得设置list_vew.xml:
<FrameLayout>
<ListView android:id="@id/android:list" />
<Button />
</FrameLayout>
Xamarin Android:
RX在这里很有用。您可以订阅 activity 中 TabLayout 的 TabSelected 事件。在下面的示例中,我有三个选项卡。对于第一个选项卡,我不想显示浮动操作按钮。但是,对于另外两个,我显示了浮动操作按钮。
var tabs = FindViewById<TabLayout>(Resource.Id.tabLayout);
tabs.SetupWithViewPager(viewPager);
Observable.FromEventPattern<EventHandler<TabLayout.TabSelectedEventArgs>, TabLayout.TabSelectedEventArgs>(
x => tabs.TabSelected += x, x => tabs.TabSelected -= x)
.Subscribe(s =>
{
var tabLayout = s.Sender as TabLayout;
if (tabLayout.SelectedTabPosition == 0)
FloatingActionButton.Hide();
else
FloatingActionButton.Show();
viewPager.SetCurrentItem(tabLayout.SelectedTabPosition, true);
});
我使用本指南创建了一个自定义 ListView,它解析来自 JSON 的数据。
https://www.bignerdranch.com/blog/customizing-android-listview-rows-subclassing/
我想向 ItemListFragment 添加一个浮动操作按钮,但不知道如何操作。
试着把它放在下面:
public ItemView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
LayoutInflater.from(context).inflate(R.layout.item_view_children, this, true);
setupChildren();
}
但是我不想要的每个项目都会显示它。
这是包含完整示例的代码:
知道怎么做吗?
尝试修改 inflate 但无效:
public static ItemView inflate(ViewGroup parent) {
ItemView itemView = (ItemView)LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_view, parent, false);
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
FloatingActionButton fab = (FloatingActionButton) inflater.inflate(R.layout.fab_view, parent, false);
return itemView;
}
编辑:
如果我把它放在构造函数下,它就可以正常工作。但是因为每个视图都会多次调用构造函数,所以我必须找到一种只调用一次的方法。
public ItemView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
LayoutInflater.from(context).inflate(R.layout.item_view_children, this, true);
LayoutInflater.from(context).inflate(R.layout.fab_view, this, true);
setupChildren();
}
将此代码添加到您的 XML 布局文件中,它将显示在右下角。
<android.support.design.widget.FloatingActionButton android:id="@+id/fab"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_menu_camera" />
然后在你的片段中class你可以用这个代码调用它
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//put your code here
}
});
终于找到解决办法了。比我想的要简单得多。 扩展 ListFragment onCreateView 方法的 ItemListFragment 调用覆盖的方法。
所以替换:
View v = super.onCreateView(inflater, container, savedInstanceState);
与:
View v = inflater.inflate(R.layout.list_view, null);
成功了!
还得设置list_vew.xml:
<FrameLayout>
<ListView android:id="@id/android:list" />
<Button />
</FrameLayout>
Xamarin Android:
RX在这里很有用。您可以订阅 activity 中 TabLayout 的 TabSelected 事件。在下面的示例中,我有三个选项卡。对于第一个选项卡,我不想显示浮动操作按钮。但是,对于另外两个,我显示了浮动操作按钮。
var tabs = FindViewById<TabLayout>(Resource.Id.tabLayout);
tabs.SetupWithViewPager(viewPager);
Observable.FromEventPattern<EventHandler<TabLayout.TabSelectedEventArgs>, TabLayout.TabSelectedEventArgs>(
x => tabs.TabSelected += x, x => tabs.TabSelected -= x)
.Subscribe(s =>
{
var tabLayout = s.Sender as TabLayout;
if (tabLayout.SelectedTabPosition == 0)
FloatingActionButton.Hide();
else
FloatingActionButton.Show();
viewPager.SetCurrentItem(tabLayout.SelectedTabPosition, true);
});