0

リストエントリをクリックしようとしています。My List はカスタム リスト ビューで、データは ArrayAdapter から取得されます。リストには、配列エントリの 3 つの部分と画像が表示されますが、これらの項目と残りの配列エントリを次のアクティビティに送信して、選択した項目に関する詳細情報を表示したいと考えています。

以下は、アダプターを含む私のクラスです。/** **/ というコメント付きのセクションが表示されますが、これらのアイテムを追加する方法を見つけようとしているのですが、理解できないようです。各 Book には 12 の属性がありますが、詳細情報をクリックする前に listView に表示されるのは 4 つだけです。

ビューホルダーを使用しているので、影響を受けているかどうかはわかりませんが、アイテムをクリックする前にリストビューにかなり長いリストを表示する予定です。

public class Novels extends ListActivity{

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

        setListAdapter(new NovelAdapter(this, R.layout.list_item, NovelsStore.getNovels()));

        getActionBar().setDisplayHomeAsUpEnabled(true);
    }

    public Novels() {
    }

    public class NovelAdapter extends ArrayAdapter<Book> {

        LayoutInflater layoutInflater;

        public NovelAdapter(Context context, int textViewResourceId, List<Book> novels) {
            super(context, textViewResourceId, novels);
            layoutInflater = LayoutInflater.from(context);
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent){
            ViewHolder holder;
            Book novels = getItem(position);

            // if no references in the view
            if (convertView == null) {
                convertView = layoutInflater.inflate(R.layout.list_item, null);

                // put them into a holder
                holder = new ViewHolder();

                holder.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
                holder.tvSeries = (TextView) convertView.findViewById(R.id.tvSeries);
                holder.tvEra = (TextView) convertView.findViewById(R.id.tvEra);
                holder.ivBookImage = (ImageView) convertView.findViewById(R.id.ivBookImage);

                //set the view tag
                convertView.setTag(holder);
            } else {
                // in case we have a recycled view, just get the Tag
                holder = (ViewHolder) convertView.getTag();
            }

            //Assign Property to the TextViews
            holder.tvTitle.setText(novels.getTitle());
            holder.tvSeries.setText(novels.getSeries());
            holder.tvEra.setText(novels.getEra());
            holder.ivBookImage.setImageResource(novels.getBookImage());

            return convertView;
        }

        public class ViewHolder {
            public TextView tvTitle;
            public TextView tvSeries;
            public TextView tvEra;
            public ImageView ivBookImage;
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                // If app icon in the action bar gets clicked; go back
                onBackPressed();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

これに関するどんな助けも素晴らしいでしょう!

4

1 に答える 1

0

実際に でBookオブジェクトを送信できますにできるposition場合は、オブジェクト全体をインテントに入れることができます。このようなものBookserializable

@Override 
protected void onListItemClick(ListView listView, View view, int position, long id) { 
    super.onListItemClick(listView, view, position, id); 

    Intent i = new Intent(getApplicationContext(), SingleItemView.class); 
    i.putExtra("my_book", NovelsStore.getNovels().get(position)); 
    startActivity(i); 
}

SingleItemViewそして、以下のようにそのオブジェクトを取得できます。

Book b = getIntent().getExtra("my_book");

ただし、null チェックを行う必要があります。

于 2014-09-22T03:35:21.660 に答える