我编写了一个带有底部导航和五个标签的应用。它可以正常工作。在第二个选项卡上,我有一个ListView,当用户单击它时,它应该打开另一个Fragment / Layout。
1。要创建选项卡的视图,我创建了一个MenuBase片段:
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
string title = (string) Arguments.Get("title");
View view = null;
switch (title)
{
case "T1":
break;
case "Tutorial":
FragActivity.Tutorial tutorial = new FragActivity.Tutorial();
view = tutorial.createTutorialAction(inflater, container, savedInstanceState);
break;
case "T3":
break;
case "T4":
break;
case "T5":
break;
}
return view;
}
2。这是我的CreateTutorial函数:
public View createTutorialAction(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
List<TutorialItem> tutorialItems = new List<TutorialItem>();
View view = inflater.Inflate(Resource.Layout.Tutorial, container, false);
ListView listView = view.FindViewById<ListView>(Resource.Id.tutorialListView);
int resID = (int)typeof(Resource.Drawable).GetField("eventPic").GetValue(null);
for (int i = 0; i < 10; i++)
{
tutorialItems.Add(new TutorialItem()
{
ImgName = resID,
Text = "Tutorial Nr " + i,
});
}
listView.Adapter = new TutorialAdapter(this, tutorialItems, container, inflater);
return view;
}
3。创建ListView:
public class TutorialAdapter : BaseAdapter<TutorialItem>
{
List<TutorialItem> items;
Activity context;
ViewGroup container;
LayoutInflater inflater;
View view;
public TutorialAdapter(Activity context, List<TutorialItem> items, ViewGroup container, LayoutInflater inflater) : base()
{
this.context = context;
this.items = items;
this.container = container;
this.inflater = inflater;
}
public override long GetItemId(int position)
{
return position;
}
public override TutorialItem this[int position]
{
get { return items[position]; }
}
public override int Count
{
get { return items.Count; }
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
var item = items[position];
view = convertView;
if (view == null) // no view to re-use, create new
view = this.inflater.Inflate(Resource.Layout.Tutorial_Profile, this.container, false);
view.FindViewById<ImageView>(Resource.Id.imgTutorialDescribe).SetImageResource(item.ImgName);
view.FindViewById<TextView>(Resource.Id.txtTutorialDescribe).Text = item.Text;
LinearLayout profile = view.FindViewById<LinearLayout>(Resource.Id.tutorialProfileLayout);
profile.Tag = item.Text;
profile.Click += OnTutorialProfileClicked;
return view;
}
}
到目前为止一切正常...但是我不知道该如何使用Bottomnavigation转到新的Layout / Fragment,或者是否可以从BaseAdapter加载它:
public void OnTutorialProfileClicked(object sender, EventArgs e)
{
//Load another Fragment
}
如果缺少某些内容,请告诉我,我可以编辑我的帖子。
我为此编写了一个演示。首先,这是一个正在运行的GIF。当我单击listview
中的项目时,它将打开一个新的片段以显示项目的文本。
这里是我的演示(如果在生成此错误时有关于cannot found the Resource.id.xxxx
的错误,请忽略它)。https://github.com/851265601/Fragment-and-Viewpager
我使用ViewPager和Fragement来获得结果。
但是我们应该为此适配器更改另一个新成就。如果我们要有新的片段,则应删除旧的片段,然后给出新的片段和该片段的NotifyDataSetChanged
。
这里是一个完整的解释。https://stackoverflow.com/a/9127423/10627299