Android Studio itemsAdapter 和自定义 ListView 不起作用

Posted

技术标签:

【中文标题】Android Studio itemsAdapter 和自定义 ListView 不起作用【英文标题】:Android Studio itemsAdapter and custom ListView not working 【发布时间】:2016-03-03 08:28:47 【问题描述】:

我在 android Studio 中尝试实现自定义 ListView。我创建了一个名为“custom_layout_rachel.xml”的 xml 文件,并将其放在我的“布局”文件夹中。此文件包含我希望我的 ListView 外观的代码。

我正在尝试使我的页面中名为“activity_urgent__important.xml”的列表视图看起来像“custom_layout_rachel.xml”中的列表视图。在这个文件中,我有以下代码:

<ListView
      android:layout_
      android:layout_
      android:id="@+id/lvItems"
      tools:listitem="@layout/custom_layout_rachel"
 />

在 Android Studio 中,自定义布局显示出来了,但是当我在我的模拟器上运行应用程序时,它不存在。

这个活动的java代码,如下所示:

lvItems = (ListView) findViewById(R.id.lvItems);
items = new ArrayList<String>();
itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.custom_layout_rachel, items);
lvItems.setAdapter(itemsAdapter);

第三行是我的错误所在。

有谁知道我为什么不能这样做或为什么会出错?

谢谢!!!

新:

       lvItems = (ListView) findViewById(R.id.lvItems);
    items = new ArrayList<String>();
    readItems();
    itemsAdapter = new CustomListAdapter(this, items);
    lvItems.setAdapter(itemsAdapter);

在“自定义列表适配器(this, items)”上出现错误

我没有适配器代码,但我确实启动了以下,如果它可以工作,我可以实现它:

public class CustomListAdapter extends ArrayAdapter 

    private Context mContext;
    private int id;
    private List<String> items ;

    public CustomListAdapter(Context context, int textViewResourceId , List<String> list )
    
        super(context, textViewResourceId, list);
        mContext = context;
        id = textViewResourceId;
        items = list ;
    

public CustomListAdapter(Context context , List<String> list) 
    super(context, items);


@Override
    public View getView(int position, View v, ViewGroup parent)
    
        View mView = v ;
        if(mView == null)
            LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            mView = vi.inflate(id, null);
        

        TextView text = (TextView) mView.findViewById(R.id.textView);

        if(items.get(position) != null )
        
            text.setTextColor(Color.WHITE);
            text.setText(items.get(position));
            text.setBackgroundColor(Color.RED);
            int color = Color.argb( 200, 255, 64, 64 );
            text.setBackgroundColor( color );

        

        return mView;
    

【问题讨论】:

我们在说什么错误? 将 custom_layout_rachel 内的 textview 的 id 更改为 android:id="@android:id/text1" @rachel 如果您想将自定义列表视图与 BaseAdapter 一起使用,请检查这些答案中的代码 sn-p ***.com/a/28104066/1140237 ***.com/a/28038963/1140237 仅适用于列表视图和 BaseAdapter 【参考方案1】:

在您的第二个CustomListAdapter 构造函数中,初始化mContext 和自mContext 以来的项目将用于在getView() 方法中膨胀视图。

public CustomListAdapter(Context context , List<String> list) 
    super(context, items);
     mContext = context;
     items = list ;

【讨论】:

【参考方案2】:
    If you are creating your own adpater extending String type. You don't have to pass android.R.layout.custom_layout_rachel in your third line of code. 
    You will be inflating your custom_layout for listview inside getView method ,within adapter. 

    Simply pass the context and values needed to be populated in Listview. 
    new ArrayAdapter<String>(this,items);
    Change your adapter constructor to the same. 

    if it doesn't work please post the adapter code. 

    Update your code like this.

    public class CustomListAdapter extends ArrayAdapter<String> 

        private Context mContext;
        private int id;
        private List<String> items ;
        private LayoutInflater inflater;

        public CustomListAdapter(Context context,List<String> list )
           super(context,list);
            this.mContext = context;
            this.items = list ;
             this.inflater=LayoutInflater.from(context)
         
     public int getCount()
    
    items.length;
    (or)
    items.size();
    
    @Override 
        public View getView(int position, View v, ViewGroup parent)
         
            if(v== null)
                  v = this.inflater.inflate(R.layout.custom_layout_rachel, null);
             

            TextView text = (TextView) v.findViewById(R.id.textView);

            if(items.get(position) != null )
             
                text.setTextColor(Color.WHITE);
                text.setText(items.get(position));
                text.setBackgroundColor(Color.RED);
                int color = Color.argb( 200, 255, 64, 64 );
                text.setBackgroundColor( color );

             

            return v;
         

changes in your code 

  lvItems = (ListView) findViewById(R.id.lvItems);
    items = new ArrayList<String>();
    readItems(); 
    itemsAdapter = new CustomListAdapter<String>(this, items);
    lvItems.setAdapter(itemsAdapter); 

【讨论】:

我认为它会起作用,最后一个问题:customListAdapter 文件中读取“super(context, list);”的行,“list”给我一个错误,说它不是已初始化。 在 getcount() 方法中添加 this.items.size() 而不是 items.size()。 给 super 加上一个整数值。超级(上下文,列表,0);

以上是关于Android Studio itemsAdapter 和自定义 ListView 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

android studio怎么更新

android studio setting 在哪

如何解决android studio2.3导入android studio2.1的问题

Android studio上找不到setting?

android studio v4包冲突

如何用android studio 编成app