在Android Studio中,我使用了带有getItemViewType()的RecyclerView.Adapter和RecyclerView.ViewHolder来确定RecyclerView中一行的位置,并在第10行放置广告。但是在颤振中,我不知道如何实现这一目标,并且在过去的两天里,我一直在网上寻找东西,或者也许我不知道它在颤振中叫什么。我可能不需要代码示例,我需要一些指导,以了解如何浏览或在网上浏览。 提示:我正在使用ListView.builder从API接收数据并将其显示在ListView.builder中。
编辑:我正在添加代码以使其更加清晰:
void main() {
runApp(MaterialApp(
debugShowCheckedModeBanner: false,
home: HomePage(),
));
}
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
Map data;
List recentNews;
var _textController = TextEditingController();
Future getRecent() async {
String url = 'https://example.com/api';
http.Response response = await http.get(url, headers: {HttpHeaders.authorizationHeader: ApiKey});
data = json.decode(response.body);
setState(() {
recentNews = data["data"];
});
}
@override
void initState() {
super.initState();
getRecent();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: DefaultTabController(
child: Scaffold(
appBar: new AppBar(
iconTheme: new IconThemeData(color: Colors.black),
backgroundColor: Colors.white,
title: Text("TEST", style: TextStyle(color: Colors.black),),
),
body:
ListView.builder(
itemCount: recentNews == null ? 0 : recentNews.length,
itemBuilder: (BuildContext context, int index) {
String serverTime = "${recentNews[index]["createdAt"]["date"]}";
DateTime time = DateTime.parse(serverTime);
String agoTime = timeago.format(time);
return Card(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: InkWell(
onTap: (){
var route = new MaterialPageRoute(
builder: (BuildContext context) =>
new WebView(slug: recentNews[index]["slug"], title: recentNews[index]["title"]),
);
Navigator.of(context).push(route);
},
child: Column(
children: <Widget>[
new Container(
child: new Image.network(recentNews[index]["image_url"])
),
Padding(
padding: const EdgeInsets.all(10.0),
child: Text("${recentNews[index]["title"]}",
style: TextStyle(
fontSize: 20.0,
fontWeight: FontWeight.w700,
),),
),
new Row(
children: <Widget>[
Text("${recentNews[index]["source"]["name"]}"),
Text(" - "),
Text(agoTime),
],
)
],
),
),
),
);
},
),
),
),
);
}
}
答案 0 :(得分:0)
尝试ListView.separated()
在septed()构造函数中,您将生成一个列表,并可以指定每个项目之间的分隔符。
ListView.separated(
itemBuilder: (context, position) {
return ListItem();
},
separatorBuilder: (context, position) {
return SeparatorItem();
},
itemCount: itemCount, //nth item as ads.
),
这种类型的列表可让您动态定义分隔符,针对不同类型的项目使用不同类型的分隔符,在需要时添加或删除分隔符,等等。
此实现还可用于轻松插入其他类型的元素(例如广告),而无需对列表项中间的主列表进行任何修改。
答案 1 :(得分:0)
尝试使用ListView.separated()
在split()构造函数中,您将生成一个列表,并可以指定每个项目之间的分隔符。
ListView.separated(
itemBuilder: (context, position) {
return ListItem();
},
separatorBuilder: (context, position) {
return Container(child: (index != 0 && index % 5 == 0) ?
AdmobBanner(adUnitId: getBannerAdUnitId(), adSize:
AdmobBannerSize.BANNER, listener: (AdmobAdEvent event, Map args)
{ //handleEvent(event, args, 'Banner'); },
):分频器(高度:2.0,)); },itemCount:itemCount,//第n个广告项。 )
祝你好运。