2015-05-21 3 views
0

Построение моего самого первого приложения для Android. Я успешно смог вызвать изображение и текстовый блок из открытого класса. Так,Изменить список просмотров из предыдущего списка просмотров

В DetailFragment, у меня есть это:

public class DetailFragment extends ListFragment { 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    /** Inflating the layout country_details_fragment_layout to the view object v */ 
    View v = inflater.inflate(R.layout.detail_fragment, null); 

    /** Getting the textview object of the layout to set the details */ 
    TextView tv = (TextView) v.findViewById(R.id.country_details); 

    ImageView img = (ImageView) v.findViewById(R.id.disco); 
    // ListView lines = (ListView) v.findViewById(R.id.country_list); 

    String[] myList = new String[] {"Hello","World","Foo","Bar", "New"}; 


    /** Getting the bundle object passed from MainActivity (in Landscape mode) or from 
    * CountryDetailsActivity (in Portrait Mode) 
    * */ 
    Bundle b = getArguments(); 

    /** Getting the clicked item's position and setting corresponding details in the textview of the detailed fragment */ 
    tv.setText("Details of " + Country.name[b.getInt("position")]); 
    img.setImageResource(DiscoImage.flags[b.getInt("position")]); 


    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), 
      android.R.layout.simple_list_item_1, ??); 
    setListAdapter(adapter); 


    return v; 
} 

Country.java возвращает эту информацию штраф:

public class Country { 

/** Array of countries used to display in CountryListFragment */ 
static String name[] = new String[] { 
     "BEYONCÉ","4","I Am... Sasha Fierce", "B'DAY", "Dangerously In Love" 
}; 
} 

Discoimage.java возвращает этот штраф:

public class DiscoImage { 
static int[] flags = new int[]{ 

    R.drawable.ic_beycd, 
    R.drawable.ic_4c, 
    R.drawable.ic_cdiam, 
    R.drawable.bdaycd, 
    R.drawable.dilcd, 
    }; 


    } 

На этот момент, когда вы нажимаете элемент списка из предыдущего представления, изображение в следующем представлении изменяется, и поэтому Textv МЭН.

Мне интересно, как мне это сделать со списком? Сделайте Java-файл со строкой, но как данные будут изложены и как она будет вызываться через

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), 
      android.R.layout.simple_list_item_1, NameofJavaClass.flags[b.getInt("position")]); 
    setListAdapter(adapter); 

ответ

1

Вы должны использовать пользовательские ArrayAdapter.

Для этого вы должны сделать 2 вещи.

1) Создайте макет, который вы хотите отобразить в каждом элементе в представлении, и сохраните его в виде XML-файла в папке макета.

2) Создайте подкласс (он может быть внутренним) ArrayAdapter, который реализует следующие два метода: 1; <SUBCLASSNAME>(Context context, int resource, item[] itemList) { super(context, resource, itemList); } 2; public View getView(int position, View convertView, ViewGroup parent), который должен возвращать представление.

Отличный видео пример этого можно найти на https://www.youtube.com/watch?v=WRANgDgM2Zg. Кроме того, если вы не используете внутренний класс, как он делает, сделать classwide LayoutInflator (например private LayoutInflater inflater;) объекта и присвоить его в конструкторе (первая часть # 2), как этот inflater = LayoutInflater.from(context);

Я надеюсь, что это помогает.

+0

Эй, спасибо за помощь. Я немного растерялся. Легко было изменить текст и изображение с помощью строк, и я хотел бы сделать это для списка. У меня есть обычный адаптер, который вызывает обычные строки в listview, но я бы хотел, чтобы он изменился, как изменение изображения и текста. – HalesEnchanted

+0

вы можете добавить данные в внутренний список адаптеров и вызвать notifyDataChanged(); или вы можете просто создать и назначить новый адаптер. оба должны работать. –

+0

Я сделал пользовательский адаптер, как вы сказали. Теперь я могу извлечь данные из него с помощью операторов switch. Все по-прежнему тот же :( общественный класс AnotherAdapter расширяет ArrayAdapter { частного контекста окончательного контекста; частные окончательный String [] значение; общественного AnotherAdapter (контекст Context, внутр songname, внутр метка, String [] значение) { супер (контекст, R.layout.songname, значения); this.context = context; this.values ​​= values; } – HalesEnchanted

Смежные вопросы