java - 无法在自定义视图中显示两个项目
问题描述
我想在我的自定义列表视图中显示项目,但我似乎无法让它工作。活动只是崩溃。我的目的是在列表视图中显示这两个项目。我能够从 firebase 检索必要的数据并将其存储到单独的数组列表中,但无法在列表视图中显示它们。在下面附上所有必要的代码。
这是我的自定义适配器类
public class CustomAdapter extends ArrayAdapter<String>{
private final Activity context;
private final ArrayList main;
private final ArrayList sub;
public CustomAdapter(Activity context,
ArrayList main, ArrayList sub) {
super(context, R.layout.colortext, main);
this.context = context;
this.main = main;
this.sub = sub;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView= inflater.inflate(R.layout.colortext, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.textmain);
TextView txtSub=rowView.findViewById(R.id.address);
txtTitle.setText((Integer) main.get(position));
txtSub.setText((Integer) sub.get(position));
return rowView;
}
}
自定义xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView1">
</ListView>
<TextView
android:id="@+id/textmain"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingLeft="6dip"
android:paddingRight="10dip"
android:textSize="23dp"
android:textColor="#01B9F5"
android:textAppearance="?android:attr/textAppearanceLarge" />
<CheckBox
android:id="@+id/checkBox"
android:clickable="true"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingLeft="6dip"
android:paddingRight="10dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:focusable="false"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello"
android:id="@+id/address"
android:layout_below="@+id/checkBox"
android:textColor="@color/white"/>
</RelativeLayout>
主要活动
mDatabase.child("users").child(mUserId).child("locs").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot ds:dataSnapshot.getChildren())
{
main.add(ds.child("title").getValue(String.class));
String g = main.toString();
sub.add(ds.child("addr").getValue(String.class));
String s = sub.toString();
ListView list = findViewById(R.id.listView1);
CustomAdapter adapter2 = new CustomAdapter(Location.this, main, sub);
list.setAdapter(adapter2);
}
}
解决方案
尝试这个。在您的适配器中添加这些方法以在您的数组列表中添加项目。
public class CustomAdapter extends ArrayAdapter<String>{
private final ArrayList mainList;
private final ArrayList subList;
public void addMain(Main main){
mainList.add(main);
notifyDataSetChanged();
}
public void addSub(Sub sub){
subList.add(sub);
notifyDataSetChanged();
}
// manage your data in onBind
@Override
public void onBindViewHolder(final ViewHolder holder, int
position) {
if(position < mainList.size() ){
// display mainlist related data here
// after adding items in mainlist, this will executed.
}
if(position > mainList.size()-1) {
// display sublist related data here
}
}
}
您需要先添加 mainList 才能满足 onbind 中的条件。您可以将数据添加到您的适配器,如下所示。
// For example this is that path of your main lists
DatabaseReference ref = database.getReference().child("main");
ref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
// I assume you have a custom object. In this case let's just say `Main`
Main main = dataSnapshot.getValue(Main.class);
adapter.addMain(notification);
}
// ... other override methods
推荐阅读
- api - 发送菜单项/选项/超链接或锚文本以显示在 twilio whatsapp api 中的菜单
- grails - 带有 VueRouter 历史模式的 Grails 4
- node.js - 由于数组属性,FaunaDB 返回同一项目的多个实例,为什么?
- azure-devops - 参与者权限组已被删除。我如何创建一个新的?
- python - Scikit-Learn:如何从错误分类的记录数组中打印出详细信息?
- firebase - 现有文档上的 .set() 是否会触发 onUpdate 或 onCreate?
- angular - NGXS 订阅 Select 变量不起作用
- python - Boto3 DynamoDB - 扫描表参数验证失败
- python - 如何从 if 循环中退出并进入菜单?
- python - 将多个txt转换为csv而不丢失数据