【问题标题】:No Data Show In ListView when using in fragment在片段中使用时ListView中没有数据显示
【发布时间】:2017-01-18 19:01:34
【问题描述】:

我在下面发布我的代码。即使代码中没有错误,我也没有在片段布局中看到任何视图,希望任何人都可以帮助我。

这是我的片段类

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view= inflater.inflate(layout.caselist, container, false);
    lv = (ListView) view.findViewById(id.list_client);

    db = new DatabaseHelper(getActivity());
    adapter = new ClientListAdapter(getActivity(), list);
    list = db.getAllClientList(); // I'm getting all data from database            
    lv.setAdapter(adapter);
    return view;
}

现在这是我的适配器类

public class ClientListAdapter extends BaseAdapter  {

List<ClientModel> myList = new ArrayList<ClientModel>();
LayoutInflater inflater;
Context context;
ListView listview;


public ClientListAdapter(Context context, List<ClientModel> myList) {
    this.myList = myList;
    this.context = context;
  //  this.listview=listview;
    inflater = LayoutInflater.from(this.context);
}

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

@Override
public ClientModel getItem(int position) {
    return (ClientModel) myList.get(position);
}


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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    MyViewHolder mViewHolder;

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.list_item, parent, false);
        mViewHolder = new MyViewHolder(convertView);
        convertView.setTag(mViewHolder);
    } else {
        mViewHolder = (MyViewHolder) convertView.getTag();
    }

    ClientModel currentListData = getItem(position);

    mViewHolder.txt_client_case_no.setText(currentListData.case_no);

    return convertView;
}

private class MyViewHolder {
    TextView txt_client_case_no, tvDesc;
    ImageView ivIcon;

    public MyViewHolder(View item) {
        txt_client_case_no = (TextView) item.findViewById(R.id.txt_client_case_no);
    }
}

}

我不知道我在哪里做错了,我的数据库中有 20 条数据。

【问题讨论】:

  • 我认为你必须先在列表变量中获取数据然后传递给适配器
  • 你在添加你的 Fragment 吗?
  • 你能告诉我如何将数据添加到列表中,因为我对编程比较陌生,希望你能理解@shubham shukla
  • 请原谅@Blackbelt
  • @酷看答案

标签: android listview android-fragments baseadapter


【解决方案1】:
View view= inflater.inflate(layout.caselist, container, false);
lv = (ListView) view.findViewById(id.list_client);

db = new DatabaseHelper(getActivity());
 list = db.getAllClientList(); // I'm getting all data from database 
adapter = new ClientListAdapter(getActivity(), list);           
lv.setAdapter(adapter);
return view;

在放入适配器之前需要获取信息

【讨论】:

    【解决方案2】:

    看来问题出在这里:

    adapter = new ClientListAdapter(getActivity(), list);
    list = db.getAllClientList(); // I'm getting all data from database 
    

    您将带有空列表的引用传递给适配器,然后获取不在您的适配器中的新列表引用。因此,首先获取您的列表,然后将其传递给适配器。

    但我想建议您至少使用 CursorLoader 从数据库加载数据。或者使用 RxAndroid 等包装它。你不应该在你的 UI 线程中访问数据库。

    附:您可以在此处阅读有关 CursorLoaders 的信息:https://developer.android.com/guide/components/loaders.html

    【讨论】:

    • 是的,问题就在那里。我会尝试使用 CursorLoader 感谢您的参考
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多