Извлечение записи из адаптера списка клиентов пользовательского представления списка для нового намерения

Я пытаюсь нажать на запись в списке. Мой список — это настраиваемое представление списка, в котором данные извлекаются из ArrayAdapter. В списке показаны 3 части записи массива и изображение, но я хочу отправить эти элементы и остальную часть записи массива в следующее действие, чтобы показать больше информации о выбранном элементе.

Ниже мой класс с адаптером. Вы увидите закомментированный раздел /** **/, в котором я пытался понять, как разместить дополнительные элементы, но я просто не могу понять это. Каждая книга имеет 12 атрибутов, но только 4 отображаются в listView, прежде чем щелкнуть для получения дополнительной информации.

Я использую Viewholder, поэтому я не уверен, влияет ли это на меня или нет, но я планирую иметь довольно длинный список в списке перед щелчком элемента.

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);
        }
    }
}

Любая помощь в этом будет здорово!


person rogue5_    schedule 22.09.2014    source источник


Ответы (1)


На самом деле вы можете отправить объект Book в position, если вы можете превратить Book в serializable, вы можете поместить весь объект в Intent. Что-то вроде этого

@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");

Однако вы должны выполнить нулевую проверку.

person Ye Lin Aung    schedule 22.09.2014
comment
Итак, если это помещает все элементы для этой строки в массиве в my_book, как мне разделить их в SingleItemView.class? если (b == ноль) { item1=?? пункт2=?? } или что-то вроде того? - person rogue5_; 25.09.2014
comment
Итак, я получаю значения, потому что я смог использовать следующий код, чтобы убедиться, что в моей my_book что-то есть. ---------------- tv = (TextView) findViewById(R.id.iv_tvTitle); Намерение myIntent = getIntent(); Пакет b = myIntent.getExtras(); if (b == null) { tv.setText (пустые значения); } еще { tv.setText (значения); } ----------- но, как я спросил в предыдущем комментарии, как мне разбить это на 12 атрибутов элемента массива? Спасибо! - person rogue5_; 25.09.2014
comment
Я передаю объект книги, а не массив объектов книги. Вы можете получить такие атрибуты, как b.getTitle() , b.getSeries() - person Ye Lin Aung; 25.09.2014