【问题标题】:Create listview in fragment android在片段android中创建listview
【发布时间】:2014-04-26 02:37:36
【问题描述】:

作为标题,我想在 Fragment 中创建一个带有自定义行的列表视图。我的代码如下。

片段类

public class PhotosFragment extends Fragment{

public PhotosFragment(){}

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

    View rootView = inflater.inflate(R.layout.fragment_photos, container, false);

    ArrayList<ListviewContactItem> listContact = GetlistContact();
    ListView lv = (ListView)getActivity().findViewById(R.id.lv_contact);
    lv.setAdapter(new ListviewContactAdapter(getActivity(), listContact));

    return rootView;
}

private ArrayList<ListviewContactItem> GetlistContact(){
    ArrayList<ListviewContactItem> contactlist = new ArrayList<ListviewContactItem>();

    ListviewContactItem contact = new ListviewContactItem();

    contact.SetName("Topher");
    contact.SetPhone("01213113568");
    contactlist.add(contact);

    contact = new ListviewContactItem();
    contact.SetName("Jean");
    contact.SetPhone("01213869102");
    contactlist.add(contact);

    contact = new ListviewContactItem();
    contact.SetName("Andrew");
    contact.SetPhone("01213123985");
    contactlist.add(contact);

    return contactlist; 
    }   
}

适配器类

public class ListviewContactAdapter extends BaseAdapter{
private static ArrayList<ListviewContactItem> listContact;

private LayoutInflater mInflater;

public ListviewContactAdapter(Context photosFragment, ArrayList<ListviewContactItem> results){
    listContact = results;
    mInflater = LayoutInflater.from(photosFragment);
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return listContact.size();
}

@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return listContact.get(arg0);
}

@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return arg0;
}


public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHolder holder;
    if(convertView == null){
        convertView = mInflater.inflate(R.layout.contact_item, null);
        holder = new ViewHolder();
        holder.txtname = (TextView) convertView.findViewById(R.id.lv_contact_item_name);          
        holder.txtphone = (TextView) convertView.findViewById(R.id.lv_contact_item_phone);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.txtname.setText(listContact.get(position).GetName());
    holder.txtphone.setText(listContact.get(position).GetPhone());

    return convertView;
}

static class ViewHolder{
    TextView txtname, txtphone;
}
}

但是当我运行应用程序时,什么都没有显示。谁能告诉我这里出了什么问题,我该如何解决?

【问题讨论】:

  • 不,它运行良好,但在片段中不显示任何内容。
  • 我也在尝试同样的事情。可以给我完整的源代码吗?
  • 我在我的问题中发布的所有内容。你也可以在google上找到很多关于listview的教程。
  • 对我来说也一样,在这里我的代码stackoverflow.com/questions/26254727/…
  • 嗨@gamo 你能告诉我布局“contact_item”和Java“ListviewContactItem”的代码吗?我正在尝试做类似的事情。

标签: android listview android-fragments


【解决方案1】:

我猜你的应用程序崩溃是因为NullPointerException

改变这个

ListView lv = (ListView)getActivity().findViewById(R.id.lv_contact);

ListView lv = (ListView)rootView.findViewById(R.id.lv_contact);

假设listview属于片段布局。

其余的代码看起来还不错

编辑:

好吧,既然你说它不起作用,我自己试过了

【讨论】:

  • @user3422401 好的,我会尝试您的代码并在 5 分钟内返回。但是代码看起来还不错
  • @user3422401 它工作正常我只按照我的帖子中的建议进行了更改。
  • @user3422401 检查快照是否正常工作。所以我们需要更多信息。发布的代码很好。您在哪里将片段添加到活动中。发布 xml 布局
  • 我试过了,但对我不起作用。我在 MainActivity 的滑动菜单调用中的 Fragment 类,但我认为这并不重要。
  • @user3422401 AFAIK 您发布的代码没有任何问题。其他地方有问题
【解决方案2】:

请使用ListFragment。否则,它将不起作用。

编辑 1: 那么你只需要setListAdapter()getListView()

【讨论】:

【解决方案3】:

你需要付出:

public void onActivityCreated(Bundle savedInstanceState)    
{
  super.onActivityCreated(savedInstanceState);
}

内部片段。

【讨论】:

    【解决方案4】:

    inflate() 方法接受三个参数:

    1. 布局 XML 文件的 ID(在 R.layout 内),
    2. 要插入片段视图的父视图组,

    3. 第三个布尔值告诉片段的视图是否从 布局 XML 文件应插入到父 ViewGroup 中。

    在这种情况下,我们传递 false 因为视图将附加到 其他地方的父 ViewGroup,通过我们调用的一些 Android 代码(在 换句话说,在我们背后)。当您将 false 作为最后一个参数传递时 到 inflate(),父 ViewGroup 仍然用于布局 膨胀视图的计算,因此您不能将 null 作为父级传递 视图组。

     View rootView = inflater.inflate(R.layout.fragment_photos, container, false);
    

    所以,你需要在这里打电话给rootView

    ListView lv = (ListView)rootView.findViewById(R.id.lv_contact);
    

    【讨论】:

      【解决方案5】:

      改为:

      public class PhotosFragment extends Fragment
      

      你可以使用:

      public class PhotosFragment extends ListFragment
      

      它改变了方法

          @Override
          public void onActivityCreated(Bundle savedInstanceState) {
              super.onActivityCreated(savedInstanceState);
              ArrayList<ListviewContactItem> listContact = GetlistContact();
              setAdapter(new ListviewContactAdapter(getActivity(), listContact));
          }
      

      onActivityCreated 是无效的,您不需要像在 onCreateView 中那样返回视图

      你可以看一个例子here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-26
        • 1970-01-01
        • 1970-01-01
        • 2011-09-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多