Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 设置自定义ListView适配器后未显示ListView_Android_Xml_Android Layout_Listview_Android Arrayadapter - Fatal编程技术网

Android 设置自定义ListView适配器后未显示ListView

Android 设置自定义ListView适配器后未显示ListView,android,xml,android-layout,listview,android-arrayadapter,Android,Xml,Android Layout,Listview,Android Arrayadapter,我试图显示一个列表视图,其中应包含发件人号码和短信正文。我正在为此创建一个自定义适配器 下面是我在其中创建和设置自定义适配器(MapInbox.java)的类代码 View-baseView; ArrayList sms_id=新建ArrayList(); ArrayList sms_num=新建ArrayList(); ArrayList sms_Name=新建ArrayList(); ArrayList sms_dt=新的ArrayList(); ArrayList sms_body=新建A

我试图显示一个列表视图,其中应包含发件人号码和短信正文。我正在为此创建一个自定义适配器

下面是我在其中创建和设置自定义适配器(MapInbox.java)的类代码

View-baseView;
ArrayList sms_id=新建ArrayList();
ArrayList sms_num=新建ArrayList();
ArrayList sms_Name=新建ArrayList();
ArrayList sms_dt=新的ArrayList();
ArrayList sms_body=新建ArrayList();
字符串smsBody,senderNumber;
列表视图lvSms;
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
baseView=充气机。充气(R.layout.fragment\u map\u收件箱,容器,false);
lvSms=(ListView)baseView.findViewById(R.id.lv_sms);
Uri myMessage=Uri.parse(“content://sms/");
ContentResolver cr=getActivity().getContentResolver();
游标c=cr.query(myMessage,新字符串[]{“\u id”,“address”,“date”,
“body”,“read”},“address='03414503584',null,null);
getActivity().startManagingCursor(c);
GetsSmslogs(c);
Handler=newhandler();
handler.postDelayed(新的Runnable(){
@凌驾
公开募捐{
CustomMessagesAdapter CustomMessagesAdapter=新建CustomMessagesAdapter
(getActivity(),R.layout.listview_消息);
设置适配器(customMessagesAdapter);
}
}, 150);
返回基本视图;
}
public void getSmsLogs(光标c){
如果(sms_num.size()>0){
sms_id.clear();
sms_num.clear();
sms_Name.clear();
sms_body.clear();
sms_dt.clear();
}
试一试{
if(c.moveToFirst()){
做{
if(c.getString(c.getColumnIndexOrThrow(“地址”)==null){
c、 moveToNext();
继续;
}
senderNumber=c.getString(
c、 getColumnIndexOrThrow(“地址”);
smsBody=c.getString(c.getColumnIndexOrThrow(“body”);
Log.e(“正文-->”,“”+smsBody);
Log.e(“编号-->”,“”+senderNumber);
sms_num.add(发送者编号);
sms_body.add(smsBody);
}而(c.moveToNext());
}
c、 close();
}捕获(例外e){
e、 printStackTrace();
}
}
私有类CustomMessagesAdapter扩展了ArrayAdapter{
CustomMessagesAdapter(上下文,int资源){
超级(上下文、资源);
}
@非空
@凌驾
公共视图getView(最终整型位置,视图转换视图,@NonNull视图组父级){
最终持票人;
if(convertView==null){
viewHolder=新的viewHolder();
LayoutInflater LayoutInflater=(LayoutInflater)getActivity().getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
convertView=LayoutFlater.inflate(R.layout.listview_消息,父级,false);
viewHolder.tvSenderNumber=(TextView)convertView.findViewById(R.id.tv\u sender\u number);
viewHolder.tvMessage=(TextView)convertView.findViewById(R.id.tv_消息);
convertView.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
viewHolder.tvSenderNumber.setText(senderNumber);
viewHolder.tvMessage.setText(smsBody);
返回视图;
}
}
私有静态类视图持有者{
文本视图tvSenderNumber;
TextView-tvMessage;
}
MapInbox布局文件的代码:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/messages_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ListView
        android:id="@+id/lv_sms"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="5dp">
</ListView>
</LinearLayout>

以及消息的自定义listView布局代码(listView_messages.xml):


背景信息

    <solid android:color="#00000000" />
    <stroke
        android:width="2dp"
        android:color="#FFF" />

    <padding
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp"
        android:top="1dp" />

    <corners
        android:bottomLeftRadius="15dip"
        android:bottomRightRadius="15dip"
        android:topLeftRadius="15dip"
        android:topRightRadius="15dip" />
</shape>

我在日志中获得所有必需的消息,我之所以将文本颜色设置为白色,是因为应用程序的背景是黑色的

我做错了什么?
谢谢

您正在编写的ListView适配器目前不知道您的数据源是什么

@NonNull
@Override
public View getView(final int position, View convertView, @NonNull ViewGroup parent) {
    final ViewHolder viewHolder;
    if (convertView == null) {
        viewHolder = new ViewHolder();
        LayoutInflater layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = layoutInflater.inflate(R.layout.listview_messages, parent, false);
        viewHolder.tvSenderNumber = (TextView) convertView.findViewById(R.id.tv_sender_number);
        viewHolder.tvMessage = (TextView) convertView.findViewById(R.id.tv_message);

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

    viewHolder.tvSenderNumber.setText(senderNumber);
    viewHolder.tvMessage.setText(smsBody);
    return convertView;
}
适配器有一个名为
getCount()
的方法,您应该覆盖该方法,并提供它应该显示多少项。您提供的这个数字用于为您重写并实现的
getView()
方法中的
int位置提供数据。现在,适配器认为没有数据传输到它(即
getCount()
返回0),因此它不会加载任何内容。为了解决这个问题,最好将所有要显示的数据合并到一个自定义类中,如上面Abhiroj Panwar所说,将它们添加到一个ArrayList中,然后在getView中使用
getView()
方法中给出的
int position
访问每组数据

viewHolder.tvSenderNumber.setText(yourCustomArrayListClass.get(position).senderNumber);
viewHolder.tvMessage.setText(yourCustomArrayListClass.get(position).smsBody);

我建议您首先将数据组织在一个地方。您可以创建一个包含所有SMS详细信息的普通旧Java类(即SMSData),然后使用该类定义ArrayList的类型参数。除此之外,您没有将数据源传递给它可以工作的适配器。
@NonNull
@Override
public View getView(final int position, View convertView, @NonNull ViewGroup parent) {
    final ViewHolder viewHolder;
    if (convertView == null) {
        viewHolder = new ViewHolder();
        LayoutInflater layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = layoutInflater.inflate(R.layout.listview_messages, parent, false);
        viewHolder.tvSenderNumber = (TextView) convertView.findViewById(R.id.tv_sender_number);
        viewHolder.tvMessage = (TextView) convertView.findViewById(R.id.tv_message);

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

    viewHolder.tvSenderNumber.setText(senderNumber);
    viewHolder.tvMessage.setText(smsBody);
    return convertView;
}
viewHolder.tvSenderNumber.setText(yourCustomArrayListClass.get(position).senderNumber);
viewHolder.tvMessage.setText(yourCustomArrayListClass.get(position).smsBody);