我正在尝试使用ArrayAdapter实现自定义列表视图,但所有项目均未显示在屏幕上 [英] I am trying to implement a custom listview using ArrayAdapter but all the items are not showing in the screen

查看:68
本文介绍了我正在尝试使用ArrayAdapter实现自定义列表视图,但所有项目均未显示在屏幕上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

MainActivity.java

MainActivity.java

public class MainActivity extends Activity {

ListView list;
String[] titles;
String[] description;
int imgs[]={R.drawable.facebook,R.drawable.instagram,R.drawable.twitter,R.drawable.google};

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

    Resources res = getResources();

    titles = res.getStringArray(R.array.titles);
    description = res.getStringArray(R.array.description);

    list = (ListView) findViewById(R.id.list1);

    MyAdapter adapter = new MyAdapter(this,titles,imgs,description);
    list.setAdapter(adapter);

    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(getApplicationContext(),Integer.toString(position),Toast.LENGTH_LONG).show();
        }
    });
}


class MyAdapter extends ArrayAdapter<String> {

    Context context;
    String myTitles[];
    String myDescription[];
    int[] imgss;

    MyAdapter(Context c, String[] titles, int[] img, String[] description) {
        super(c,R.layout.row,R.id.text1,titles);
        this.context=c;
        this.imgss=img;
        this.myTitles=titles;
        this.myDescription=description;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater layoutInflater = (LayoutInflater)   getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View row = layoutInflater.inflate(R.layout.row, parent, false);
    ImageView images = (ImageView) findViewById(R.id.logo);
    TextView myTitle = (TextView) findViewById(R.id.text1);
    TextView myDescription = (TextView) findViewById(R.id.text2);
    images.setImageResource(R.drawable.facebook);
    images.setImageResource(imgs[position]);
    myTitle.setText(titles[position]);
    myDescription.setText(description[position]);
    return row;   
    }
  }
}

activity_main.xml

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout     xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context="com.apakdroid.customlistview.MainActivity" >

    <ListView
        android:id="@+id/list1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true" />

</RelativeLayout>

row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:padding="5dp"
    android:id="@+id/logo"
    android:src="@mipmap/ic_launcher"/>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="2dp"
        android:textColor="#33CC33"
        android:id="@+id/text1"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="10dp"
        android:text="Medium Text"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text2"
        android:layout_marginLeft="10dp"
        android:text="TextView" />

</LinearLayout>

strings.xml

strings.xml

<resources>
<string name="app_name">Custom ListView</string>
<string-array name="titles">
    <item>Facebook</item>
    <item>Instagram</item>
    <item>Twitter</item>
    <item>Google</item>
</string-array>

<string-array name="description">
    <item>Facebook Description</item>
    <item>Instagram Description</item>
    <item>Twitter Description</item>
    <item>Google Description</item>
</string-array>

屏幕截图(Android和Logcat):- http://imgur.com/a/816Q1

Screenshots (Android and Logcat):- http://imgur.com/a/816Q1

ArrayAdapter仅显示string.xml中的最后一个值和img数组中的最后一个图像.无法显示所有图像和文本.

The ArrayAdapter is only showing the last value from strings.xml and the last image from img array. Unable to display all the images and text.

images.setImageResource(imgs [position])行中有一个错误,为NullPointerException. 屏幕快照中附有 Logcat .

There is an error in line images.setImageResource(imgs[position]) as NullPointerException. Logcat is attached in the screenshot.

推荐答案

我认为您的问题可能出在getView方法或您的适配器中. 您应该使用行"视图查找子控件.

I think that your issue might be in getView method or your adapter. You should use 'row' view to find child controls.

View row = layoutInflater.inflate(R.layout.row, parent, false);
ImageView images = (ImageView) row.findViewById(R.id.logo);
TextView myTitle = (TextView) row.findViewById(R.id.text1);
TextView myDescription = (TextView) row.findViewById(R.id.text2);

这篇关于我正在尝试使用ArrayAdapter实现自定义列表视图,但所有项目均未显示在屏幕上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆