【问题标题】:ListView doesn't appear in the applicationListView 没有出现在应用程序中
【发布时间】:2017-12-28 19:18:38
【问题描述】:

我是 android 开发的初学者,所以放轻松:3

我创建了一个自定义 listView 并向其中传递了一些值,但是当我运行应用程序时,什么都没有出现

但是当我用它放置一个 textView 时,文本视图出现但列表视图没有出现:/

并且代码没有显示任何错误!

这是我的 MainActivity.java

ArrayList<Item> customList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    customList=new ArrayList<Item>();



    for (int i=0; i<pics.length;i++){
        ImageView pic= new ImageView(this);
        pic.setImageResource(pics[i]);
        Item item= new Item(null,names[i],desc[i],times[i]);
        customList.add(item);
    }


    ListView lv = (ListView) findViewById(R.id.listview);
    CustomAdapter myAdapter = new CustomAdapter(customList);
    lv.setAdapter(myAdapter);


}




class CustomAdapter extends BaseAdapter{


    ArrayList<Item> myList;

    public CustomAdapter(ArrayList<Item> list) {
        this.myList=list;
    }

    @Override
    public int getCount() {
        return 0;
    }

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

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

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

        LayoutInflater infalter= getLayoutInflater();
        View view = infalter.inflate(R.layout.custom_row,null);

        ImageView image=(ImageView) findViewById(R.id.image);
        TextView name=(TextView) findViewById(R.id.title);
        TextView message=(TextView) findViewById(R.id.desc);
        TextView time=(TextView) findViewById(R.id.time);

        image=myList.get(position).getPic();
        name.setText(myList.get(position).getName());
        message.setText(myList.get(position).getMessage());
        time.setText(myList.get(position).getTime());





        return view;
    }
}

}

这是我的 XML 文件

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.hp.myapplication.MainActivity">




<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/listview"
    tools:layout_editor_absoluteY="8dp"
    tools:layout_editor_absoluteX="8dp"/>

【问题讨论】:

  • 在 yoru getView 方法中......你能添加视图吗?在 findViewById 前面
  • 对不起,我不明白你让我做什么
  • 请参考此 [journaldev.com/10416/… 示例
  • shravani 我认为问题在于我在“MainActivity”类中创建了自定义适配器类,但是当我在 MainActivity 类之外创建它时,我无法使用此方法 LayoutInflater infalter= getLayoutInflater();

标签: java android list listview view


【解决方案1】:

更改您的 getCount() 以返回列表中的项目数 list.getSize() 。您的 getcount 为 0。

【讨论】:

  • 我按照你说的做了,但是当我运行它时,应用程序现在崩溃了
  • 您正在列表视图中添加代替 imageview 并且您正在尝试在 getView() 中访问它。这就是你崩溃的原因。 Item item= new Item(null,names[i],desc[i],times[i]); customList.add(item); // adding null 和,image=myList.get(position).getPic(); // 删除这一行
  • 我没有收到编译错误,但是当我在手机中执行它时显示“应用程序已停止”
  • 这无关紧要...这只是一个getter方法。它允许您快速返回列表的大小。
  • 当您添加空数据时,您的 getter 方法将从哪里获取数据?
【解决方案2】:

这应该让您开始正确地进行列表视图。

我认为你的问题就在这里。

   for (int i=0; i<pics.length;i++){
        ImageView pic= new ImageView(this);
        pic.setImageResource(pics[i]);
        Item item= new Item(null,names[i],desc[i],times[i]);
        customList.add(item);
    }

您不想在此处添加图像视图...图像视图将属于自定义布局。如果你在一个新项目中看到我下面的代码,我想你会更详细地理解它

我的主要活动

ListView listview;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listview = (ListView) findViewById(R.id.listview);

    List<Model> list = new ArrayList<>();
    list.add(new Model("top-one", "bot-one"));
    list.add(new Model("top-two", "bot-two"));
    list.add(new Model("top-three", "bot-three"));
    list.add(new Model("top-four", "bot-four"));
    list.add(new Model("top-five", "bot-five"));
    list.add(new Model("top-six", "bot-six"));
    list.add(new Model("top-seven", "bot-seven"));
    list.add(new Model("top-eight", "bot-eight"));

    ListAdapter adapter = new ListAdapter(listview.getContext(), list);
    listview.setAdapter(adapter);
}

主要活动 XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.fuhnatik.customlistview.MainActivity">

    <ListView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/listview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</android.support.constraint.ConstraintLayout>

一个模型来存储我的数据

public class Model {

    String top, bottom;

    public Model(String top, String bottom) {
        this.top = top;
        this.bottom = bottom;
    }

    public String getTop() {
        return top;
    }

    public void setTop(String top) {
        this.top = top;
    }

    public String getBottom() {
        return bottom;
    }

    public void setBottom(String bottom) {
        this.bottom = bottom;
    }
}

单件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip"
android:orientation="vertical">


<TextView
    android:id="@+id/top"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:text="TOP SECTION HERE"
    android:textSize="16sp" />

<TextView
    android:id="@+id/bottom"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="BOTTOM SECTION HERE"
    android:textSize="12sp" />



</LinearLayout>

适配器

public class ListAdapter extends ArrayAdapter<Model> {


    private Context activityContext;
    private List<Model> list;
    public static final String TAG = "ListView";

    public ListAdapter(Context context, List<Model> list){
        super(context, R.layout.single_listview, list);
        this.activityContext = context;
        this.list = list;
    }


    @Override
    public View getView(final int position, View view, ViewGroup viewGroup){

        final ViewHolder viewHolder;

        if (view == null) {
            view = LayoutInflater.from(activityContext).inflate(R.layout.single_listview, null);
            viewHolder = new ViewHolder();

            viewHolder.top = (TextView) view.findViewById(R.id.top);
            viewHolder.bottom = (TextView) view.findViewById(R.id.bottom);

            viewHolder.top.setText(list.get(position).getTop());
            viewHolder.bottom.setText(list.get(position).getBottom());

            view.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) view.getTag();
        }

        return view;
    }

    private static class ViewHolder {

        TextView top;
        TextView bottom;
    }


}

【讨论】:

    【解决方案3】:

    在代码中做如下修改:

    @Override
    public Object getItem(int position) {
        return myList.get(position);
    }
    
    @Override
    public int getCount() {
        return myList.size();
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    
        LayoutInflater infalter= getLayoutInflater();
        View view = infalter.inflate(R.layout.custom_row,null);
    
        ImageView image=(ImageView) view.findViewById(R.id.image);
        TextView name=(TextView) view.findViewById(R.id.title);
        TextView message=(TextView) view.findViewById(R.id.desc);
        TextView time=(TextView) view.findViewById(R.id.time);
    
        image=myList.get(position).getPic();
        name.setText(myList.get(position).getName());
        message.setText(myList.get(position).getMessage());
        time.setText(myList.get(position).getTime());
    
        return view;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-27
      相关资源
      最近更新 更多