雑誌リーダーアプリのメインナビゲーション機能としてListViewを使用しようとしています。リスト内の各ビューに、関連する画像の下にストーリーの見出しを表示したいと思います。上部にImageView、下部にTextViewを備えた垂直方向のLinearLayoutを使用してXMLレイアウトを作成し、getViewメソッドでこのレイアウトを拡張して画像/テキストリソースを配置するカスタムアダプターを作成しようとしています。これが私のコードです:
package com.example.caliber;
import java.util.List;
import com.example.caliber.R;
public class MainActivity extends Activity {
Spinner issues, sections;
Button blog;
ListView mainGal;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] issueList = {"issues", "fall '12", "spring '12", "fall '11", "spring '12",
"fall '10", "spring '10"};
String[] sectionList = {"sections", "campus", "entertainment", "lifestyle", "love&sex", "tech&web", "Current" };
ArrayAdapter<String> aaIssues = new ArrayAdapter<String>(this, R.layout.spin_item, issueList);
ArrayAdapter<String> aaSections = new ArrayAdapter<String>(this,
R.layout.spin_item, sectionList);
blog = (Button)findViewById(R.id.blogBtn);
issues = (Spinner)findViewById(R.id.issueSpin);
sections = (Spinner)findViewById(R.id.sectionSpin);
issues.setAdapter(aaIssues);
sections.setAdapter(aaSections);
OnClickListener mbListener = new OnClickListener() {
@Override
public void onClick(View v){
issues.setAlpha((float) 0.5);
sections.setAlpha((float) 0.5);
blog.setAlpha((float) 0.5);
}
};
ImageButton mainbtn = (ImageButton)findViewById(R.id.cbutton);
mainbtn.setOnClickListener(mbListener);
mainGal = (ListView)findViewById(R.id.mainGal);
GalAdapter ga = new GalAdapter();
mainGal.setAdapter(ga);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
class GalAdapter extends ArrayAdapter<String> {
Activity context;
String[] headlines = {"Alpha bravo charlie delta", "Echo foxtrot golf
hotel", "indigo juliette kilo lima"};
int[] images = {R.drawable.img1, R.drawable.img2, R.drawable.img3};
public GalAdapter() {
super (MainActivity.this, R.layout.galleryview);
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
LayoutInflater li = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View story = li.inflate(R.layout.galleryview, parent);
ImageView image = (ImageView)story.findViewById(R.id.image);
TextView headline = (TextView)story.findViewById(R.id.headline);
image.setImageResource(images[position]);
headline.setText(headlines[position]);
return story;
}
アプリは正常に起動し、リストビューの背景を確認できますが、リストにアイテムがありません。どうしてこれなの?おそらく明らかなように、私はAndroid開発に非常に慣れていませんが、Javaの基本をよく理解しています。これは、私がここで持っている根本的な誤解、おそらくコンストラクターの1つでのエラーによるものであることを認識しています(パラメーターのいくつかについてはまだ少しあいまいです)。とにかく、誰かが私がこれらの問題をより深く理解するのを手伝ってくれるなら、私は非常に感謝します。
前もって感謝します
psこれをandroidとjavaの両方に分類するのは悪い形式ですか?将来的にはAndroidを使用する必要がありますか?
- -編集:
class GalAdapter extends ArrayAdapter<String> {
Activity context;
String[] hlines;
int[] imgs;
public GalAdapter(String[] hlines, int[] imgs) {
super (MainActivity.this, R.layout.galleryview , hlines);
this.hlines = hlines;
this.imgs = imgs;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
if (convertView == null){
LayoutInflater li = (LayoutInflater)context. getSystemService (Context.LAYOUT_INFLATER_SERVICE);
convertView = li.inflate(R.layout.galleryview, parent);
ImageView image = (ImageView)convertView.findViewById(R.id.image);
TextView headline = (TextView)convertView.findViewById(R.id.headline);
image.setImageResource(imgs[position]);
headline.setText(hlines[position]);}
return convertView;
}
}
LayoutInflatorを呼び出した行でnullポインター例外が発生します。それはどのポインタを指しているのですか?配列(String [] hlines + int [] imgs)を適切に渡していないと仮定しています...ここで呼び出しを行います。
String[] headlines ={ "Echo foxtrot golf hotel", "Echo foxtrot golf hotel", "indigo
juliette kilo lima"};
int[] images = {R.drawable.img1, R.drawable.img2, R.drawable.img3};
....
mainGal = (ListView)findViewById(R.id.mainGal);
GalAdapter ga = new GalAdapter(headlines, images);
mainGal.setAdapter(ga);