2017-03-13 29 views
0

MainActivity.java我試圖實現使用ArrayAdapter的自定義列表視圖,但所有的項目都沒有在屏幕

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中

<?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.x毫升

<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

一個ArrayAdapter僅示出了從strings.xml中的最後一個值和從陣列的img的最後一個圖像。無法顯示所有圖像和文字。

作爲NullPointerException,有一行images.setImageResource(imgs [position])錯誤。 Logcat附加在屏幕截圖中。

回答

0

我認爲你的問題可能在getView方法或你的適配器。 您應該使用「行」視圖來查找子控件。

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); 
+0

THX您的信息..它的工作.. –

+0

進行表決向上或接受的答案不會傷害:) – Luci

+0

對不起,因爲這一個新的帳戶投票了不公開顯示,但已被記錄.. –

0

您需要添加佈局管理到你的ListView/RecyclerView。設置適配器之前。

怎麼辦

rvCategories.setHasFixedSize(true); 
rvCategories.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false)); 

請記住,我們有更多的佈局管理器..

而且你需要在你的組件的初始化。 細節:row.findViewById。

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); 
+0

我無法理解你在說什麼。我是一個新手。你能否詳細說明一下。謝謝 –

+0

Thx它的工作... –

0

我覺得問題在於你的getView()方法。 您忘記將查看對象放在查找ID中。

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); 
相關問題