Java 添加列表<;字符串>;friends=新ArrayList<&燃气轮机;(); 自定义列表视图

Java 添加列表<;字符串>;friends=新ArrayList<&燃气轮机;(); 自定义列表视图,java,android,Java,Android,无法将列表添加到自定义列表视图。我在使用字符串[]时遇到问题,我试图从firebase数据库获取我的用户并将其存储到我的数据库中 private ArrayList userInfos userInfos=newarraylist() 但是当运行它到emulator时,我的listview显示为空白,我尝试检查List friends=new ArrayList()和我的用户都可用。有人能帮我吗 My MainActivityCustomListViewNew.java import andro

无法将列表添加到自定义列表视图。我在使用字符串[]时遇到问题,我试图从firebase数据库获取我的用户并将其存储到我的数据库中
private ArrayList userInfos
userInfos=newarraylist()
但是当运行它到emulator时,我的listview显示为空白,我尝试检查
List friends=new ArrayList()和我的用户都可用。有人能帮我吗

My MainActivityCustomListViewNew.java

import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;



public class MainActivityCustonlistViewnew extends AppCompatActivity {



    private ArrayList<UserInfo> userInfos;
    private CustomListAdapter customListAdapter;
    private ListView customListView;



    private FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
    private DatabaseReference databaseReference = firebaseDatabase.getReference();

    private  DatabaseReference UserData = databaseReference.child("Users");


    private List<String> friends = new ArrayList<>();

    private String[] names ;


    private String[] professions={
            "Rank 1",
            "Rank 2",
            "Rank 3"

    };
    private int[] photos={
            R.drawable.sample_5,
            R.drawable.sample_1,
            R.drawable.sample_6

    };



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maincustomlistview);
        setSupportActionBar((Toolbar)findViewById(R.id.toolbar));


       // ArrayList arrayList = new ArrayList(friends);

        ValueEventListener eventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for(DataSnapshot ds : dataSnapshot.getChildren()) {
                    String friend = ds.getKey();

                    friends.add(friend);



                }

        }

            @Override
            public void onCancelled(DatabaseError databaseError) {}
        };
        UserData.addListenerForSingleValueEvent(eventListener);




        customListView=(ListView)findViewById(R.id.custom_list_view);
        userInfos=new ArrayList<>();
        Arrays.sort(names, String.CASE_INSENSITIVE_ORDER);
        customListAdapter=new CustomListAdapter(userInfos,MainActivityCustonlistViewnew.this);
        customListView.setAdapter(customListAdapter);
        getDatas();
        customListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Toast.makeText(MainActivityCustonlistViewnew.this, "Name : " + names[i] + "\n Profession : " + professions[i], Toast.LENGTH_SHORT).show();
            }
        });



//sample-----












    }

    // getting all the datas
    private void getDatas(){




        for(int count=0;count<names.length;count++){

            userInfos.add(new UserInfo(names[count],professions[count],photos[count]));

        }
    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.search_option,menu);
        MenuItem menuItem=menu.findItem(R.id.search);
        SearchView searchView=(SearchView)menuItem.getActionView();
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return true;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                newText=newText.toString();
                ArrayList<UserInfo> newUserInfos=new ArrayList<>();

                for(UserInfo userInfo:userInfos){
                    String name=userInfo.getName().toLowerCase();
                    String profession=userInfo.getProfession().toLowerCase();
                    if(name.contains(newText) || profession.contains(newText)){
                        newUserInfos.add(userInfo);
                    }
                }
                customListAdapter.filterResult(newUserInfos);
                customListAdapter.notifyDataSetChanged();
                return false;
            }
        });
        return super.onCreateOptionsMenu(menu);
    }
}
我的customlistAdapter

import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class CustomListAdapter extends BaseAdapter implements View.OnClickListener{
    private ArrayList<UserInfo> userInfos;
    private Context context;

    public CustomListAdapter(ArrayList<UserInfo> userInfos, Context context) {
        this.userInfos = userInfos;
        this.context = context;
    }

    @Override
    public int getCount() {
        return userInfos.size();
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        LayoutInflater layoutInflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view=layoutInflater.inflate(R.layout.custom_list_view_layout,null);
        ImageView photo,option;
        if(view==null){
            photo=new ImageView(context);
        }
        UserInfo userInfo=userInfos.get(i);
        photo=(ImageView)view.findViewById(R.id.photo);
        option=(ImageView)view.findViewById(R.id.option);
        TextView name=(TextView)view.findViewById(R.id.name);
        TextView profession=(TextView)view.findViewById(R.id.profession);
        photo.setImageResource(userInfo.getPhoto());
        name.setText(userInfo.getName());
        profession.setText(userInfo.getProfession());
        option.setOnClickListener(this);
        return view;
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
           case R.id.option:
               showPopupMenu(view);
                break;
        }
    }

    // getting the popup menu
    private void showPopupMenu(View view){
        PopupMenu popupMenu=new PopupMenu(context,view);
        popupMenu.getMenuInflater().inflate(R.menu.option_menu,popupMenu.getMenu());
        popupMenu.show();
        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                switch (menuItem.getItemId()){
                    case R.id.edit:
                        Toast.makeText(context, "Edit !", Toast.LENGTH_SHORT).show();
                        return true;
                    case R.id.remove:
                        Toast.makeText(context, "Remove !", Toast.LENGTH_SHORT).show();
                        return true;
                    default:
                        return false;
                }
            }
        });
    }

    //file search result
    public void filterResult(ArrayList<UserInfo> newUserInfos){
        userInfos=new ArrayList<>();
        userInfos.addAll(newUserInfos);
        notifyDataSetChanged();
    }
}
导入android.view.LayoutInflater;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.ImageView;
导入android.widget.PopupMenu;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.util.ArrayList;
公共类CustomListAdapter扩展BaseAdapter实现View.OnClickListener{
私有ArrayList用户信息;
私人语境;
公共CustomListAdapter(ArrayList用户信息,上下文){
this.userInfos=userInfos;
this.context=上下文;
}
@凌驾
public int getCount(){
返回userInfos.size();
}
@凌驾
公共对象getItem(int i){
返回null;
}
@凌驾
公共长getItemId(int i){
返回0;
}
@凌驾
公共视图getView(int i、视图视图、视图组视图组){
LayoutInflater LayoutInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
视图=布局更平坦。充气(R.layout.custom\u list\u view\u layout,null);
ImageView照片,选项;
如果(视图==null){
照片=新图像视图(上下文);
}
UserInfo UserInfo=userInfos.get(i);
photo=(ImageView)view.findviewbyd(R.id.photo);
option=(ImageView)view.findViewById(R.id.option);
TextView name=(TextView)view.findViewById(R.id.name);
TextView profession=(TextView)view.findViewById(R.id.profession);
setImageResource(userInfo.getPhoto());
name.setText(userInfo.getName());
setText(userInfo.getProfession());
option.setOnClickListener(此选项);
返回视图;
}
@凌驾
公共void onClick(视图){
开关(view.getId()){
案例R.id.选项:
显示弹出菜单(视图);
打破
}
}
//获取弹出菜单
私有void显示弹出菜单(视图){
弹出菜单弹出菜单=新建弹出菜单(上下文、视图);
充气(R.menu.option_菜单,popupMenu.getMenu());
show();
setOnMenuItemClickListener(新的popupMenu.OnMenuItemClickListener(){
@凌驾
公共布尔onMenuItemClick(MenuItem MenuItem){
开关(menuItem.getItemId()){
案例R.id.edit:
Toast.makeText(上下文,“编辑!”,Toast.LENGTH_SHORT.show();
返回true;
案例R.id.移除:
Toast.makeText(上下文,“删除!”,Toast.LENGTH_SHORT.show();
返回true;
违约:
返回false;
}
}
});
}
//文件搜索结果
public void filterResult(ArrayList newUserInfos){
userInfos=newarraylist();
addAll(newUserInfos);
notifyDataSetChanged();
}
}
你在这里做错了。您正在调用customListAdapter并在此处将cusrom数据(userInfos)设置为空。因为在customListAdapter之后调用了getDatas()方法。因此,列表将为空。交换正电子

getDatas();
customListAdapter=new CustomListAdapter(userInfos,MainActivityCustonlistViewnew.this);
customListView.setAdapter(customListAdapter);
希望能有帮助

谢谢 索拉布
快乐编码

您正在从
getDatas()
添加数据,但您的适配器已用空数据初始化。因此有两种方法:

1:在调用
getDatas()之后初始化并设置适配器

    getDatas();
    customListAdapter=new CustomListAdapter(userInfos,MainActivityCustonlistViewnew.this);
    customListView.setAdapter(customListAdapter);
2:使用
notifyDataSetChanged()
method

    customListView.setAdapter(customListAdapter);
    getDatas();
    customListAdapter.notifyDataSetChanged();

您在Userinfo.java类make set方法中也只有get方法,您将能够添加数据
userInfos.add()
没有问题,因为
Userinfo
对象将首先初始化并添加
    getDatas();
    customListAdapter=new CustomListAdapter(userInfos,MainActivityCustonlistViewnew.this);
    customListView.setAdapter(customListAdapter);
    customListView.setAdapter(customListAdapter);
    getDatas();
    customListAdapter.notifyDataSetChanged();