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