У меня есть ListView с элементами. Я использую XML для анализа данных. В этот момент я анализирую данные для одного элемента в DetailsView. Когда я нажал на элемент, как сделать DetailsView для элементов с SwipeViews между элементами? Как реализовать с помощью ViewPager? Я пытаюсь разработать несколько примеров, но не работал. Буду признателен, если кто-нибудь поможет мне.Swipe Details View
ответ
Для этого сначала создайте Fragment
. Это для одной детали. Деталь, которую вы проведете. Поэтому примените свой макет к этому.
@SuppressLint("ValidFragment")
public class Detail extends Fragment {
private final String detail;
public DetailView(String detail) {
this.detail = detail;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.detailfragment, container, false);
TextView textView = (TextView) view.findViewById(R.id.detailText);
textView.setText(detail);
return view;
}
}
Теперь создайте свой Activity
. Это Activity
, что вы пойдете, когда вы щелкнете. Теперь код добавляет Fragment
для каждой детали.
public class Main extends FragmentActivity {
public static ViewPager mPager;
private MyAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mPager = (ViewPager) findViewById(R.id.viewPager1);
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager.setAdapter(mAdapter);
}
public static class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
//The count of details. This will return 5 swipeable views.
return 5;
}
@Override
public Fragment getItem(int position) {
return new Detail("I'm a detail!");
}
}
}
Это создаст 5 деталей с текстом «Я деталь!». Теперь я предполагаю, что вы используете ArrayList
, чтобы хранить детали. После этого вы можете получить детали как это:
public static class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm, ArrayList<HashMap<String, String>> d) {
super(fm);
data = d;
}
@Override
public int getCount() {
return 5;
}
@Override
public Fragment getItem(int position) {
HashMap<String, String> map = new HashMap<String, String>();
map = data.get(position);
Log.d("", data.get(position).toString());
return new Detail(map.get('KeyForYourDetail'));
}
}
Также на вашем MainActivity
изменения
mAdapter = new MyAdapter(getSupportFragmentManager());
к этому
mAdapter = new MyAdapter(getSupportFragmentManager(), yourArrayList);
EDIT
Давайте начнем с самого начала. Во-первых, у вас есть MainActivity
, который содержит ListView
. В ListView
вы вызываете предметы от ArrayList
. Когда вы нажимаете на элемент, вы получаете информацию об этом от (?). Теперь мой код не может этого сделать. Вы должны сделать это самостоятельно. После того, как вы получите деталь, просто замените часть title
ниже. Подводя итог, пост кода i должен работать, если вы можете получить «деталь», если вы не знаете, как получить детали, тогда вы должны создать другой вопрос.
return new Detail(title);
EDIT 2
ОК, вот другая часть. Ниже приведен код для FragmentActivity.
Во-первых, мы должны объявить наш адаптер и ViewPager
.
public static ViewPager mPager;
private MyAdapter mAdapter;
ArrayList<HashMap<String, String>> detailList= new ArrayList<HashMap<String, String>>();
MyAdapter это адаптер, который помещает детали в ViewPager
. Чтобы сохранить данные, нам также нужен ArrayList
, как я сказал выше. Теперь вы сказали, что у вас нет проблем с разбором. Поэтому я пропускаю эту часть. В то время как вы разбираете, я предполагаю, что вы используете NodeList
(я взял эту часть из here)
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// пробегаем по всем узлам элементов
для (INT I = 0; я < nl.getLength() ; i ++) { Строковое имя = parser.getValue (e, KEY_NAME); // имя дочернего значения Строка cost = parser.getValue (e, KEY_COST); // стоимость дочернего значения Описание строки = синтаксический анализатор.getValue (e, KEY_DESC); // значение Описания ребенка }
Внутри ваше для петли создайте HashMap
как этого
HashMap<String, String> map = new HashMap<String, String>();
Помните, когда мы создавали НАШИ ArrayList
? Объект был HashMap
. Теперь мы собираемся заполнить наши данные для отображения, а затем добавить карту в ArrayList. (Опять же, это идет внутри для цикла)
map.put(TAG_DETAIL, detail);
detailList.add(map);
Теперь эта часть закончена, осталось только установка адаптера.
mAdapter = new MyAdapter(getSupportFragmentManager(), detailList);
mPager.setAdapter(mAdapter);
И все готово! Позвольте мне объяснить, что будет дальше. Вы помните наш адаптер?
public MyAdapter(FragmentManager fm, ArrayList<HashMap<String, String>> d) {
super(fm);
data = d;
}
Здесь, как вы видите, это занимает FragmentManger
и ArrayList
с Hashmap
внутри него. мы устанавливаем их с getSupportFragmentManager()
и detailList
. Адаптер принимает детальList с деталями внутри него, а затем создает с ним Fragments
. Надеюсь, это было достаточно ясно. Если бы не было, спросите еще раз.
Отлично! Я использую ArrayList. Спасибо. Если у меня возникнут проблемы, я напишу вам. –
Если это работает, не забудьте [принять] (http://meta.stackexchange.com/a/5235/246892) – user666
AnketSoruDetay, что это за класс? –
Это код MyAdapter.java:
общественного класса MyAdapter расширяет ArrayAdapter {
ImageLoader imageLoader;
DisplayImageOptions options;
public MyAdapter(Context ctx, int textViewResourceId, List<NewsFeed> sites) {
super(ctx, textViewResourceId, sites);
//Setup the ImageLoader, we'll use this to display our images
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(ctx).build();
imageLoader = ImageLoader.getInstance();
imageLoader.init(config);
//Setup options for ImageLoader so it will handle caching for us.
options = new DisplayImageOptions.Builder()
.cacheInMemory()
.cacheOnDisc()
.build();
}
/*
* (non-Javadoc)
* @see android.widget.ArrayAdapter#getView(int, android.view.View, android.view.ViewGroup)
*
* This method is responsible for creating row views out of a StackSite object that can be put
* into our ListView
*/
@Override
public View getView(int pos, View convertView, ViewGroup parent){
RelativeLayout row = (RelativeLayout)convertView;
Log.i("Feed", "getView pos = " + pos);
// если (нуль == строка) { // // Нет переработанного вид, мы должны раздувать один. // LayoutInflater inflater = (LayoutInflater) parent.getContext(). GetSystemService (Context.LAYOUT_INFLATER_SERVICE); // row = (RelativeLayout) inflater.inflate (R.layout.list_item, null); //}
if (pos != 0){
LayoutInflater inflater = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = (RelativeLayout)inflater.inflate(R.layout.list_item, null);
}
else
{
//No recycled View, we have to inflate one.
LayoutInflater inflater = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = (RelativeLayout)inflater.inflate(R.layout.list_first_item, null);
}
//Get our View References
final ImageView iconImg = (ImageView)row.findViewById(R.id.iconImg);
TextView titleTxt = (TextView)row.findViewById(R.id.titleTxt);
final ProgressBar indicator = (ProgressBar)row.findViewById(R.id.progress);
//Initially we want the progress indicator visible, and the image invisible
indicator.setVisibility(View.VISIBLE);
iconImg.setVisibility(View.INVISIBLE);
//Setup a listener we can use to swtich from the loading indicator to the Image once it's ready
ImageLoadingListener listener = new ImageLoadingListener(){
@Override
public void onLoadingStarted(String arg0, View arg1) {
// TODO Auto-generated method stub
}
@Override
public void onLoadingCancelled(String arg0, View arg1) {
// TODO Auto-generated method stub
}
@Override
public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) {
indicator.setVisibility(View.INVISIBLE);
iconImg.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {
// TODO Auto-generated method stub
}
};
//Load the image and use our options so caching is handled.
imageLoader.displayImage(getItem(pos).getImgUrl(), iconImg,options, listener);
//Set the relavent text in our TextViews
titleTxt.setText(getItem(pos).getTitle());
return row;
}
}
Итак, это для вашего текущего ListView, не так ли? Если да, то как вы получаете детали? – user666
Да, это для моего ListView. Я получаю такие детали: String title = mAdapter.getItem (pos) .getTitle(); \t \t \t \t \t Intent in = new Intent (FeedActivity.this, DetailsActivity.class); in.putExtra ("pos", pos); in.putExtra ("title", title); \t startActivity (in); –
titleText = (TextView) findViewById (R.id.titleTxt); titleText.setText (getIntent(). GetExtras(). GetString ("title")); –
- 1. UISplitViewController change master и details view form details view
- 2. Nsdictionary Push details view
- 3. Изображение swipe view
- 4. View Pager swipe transition
- 5. UITableViewCell Custom Swipe View
- 6. Disable Gallary View Swipe
- 7. MVC View Details and Edit
- 8. View Controller Not Displaying Details
- 9. CSS слайд в swipe view
- 10. Android: Изменить изображение Swipe View
- 11. android view pager swipe animation
- 12. PDO view insert details of query
- 13. Bind Details View in Insert Mode
- 14. Magento Product View Details Неправильно загружается
- 15. help using file upload in details view
- 16. Использование дополнительной таблицы в MVVM Details View
- 17. Json - Подготовьтесь к segue to Details View
- 18. MVVM pattern где hold current view details
- 19. Null Pointer Exception tab swipe view
- 20. что такое андроид, эквивалентный ios swipe view
- 21. iOS card swipe animation & scroll view
- 22. iOS. Table View Cell swipe hard working
- 23. Записи данных Sqlite Android View at swipe
- 24. Swipe View and Multiple Fragments Android
- 25. Как удалить View Details из поля в форме?
- 26. Получение свойства модели из «Details» View в ASP.Net MVC
- 27. update details ci
- 28. Android Button Details
- 29. GameCenter details
- 30. Tablespace details
Вы хотите красть между элементами ListView, когда вы нажали один из пунктов? – user666
Когда я нажимаю элемент ListView, я перехожу к другому действию. В этом упражнении я хочу отображать детали с помощью SwipeViews, прокручивать между деталями. –
О, подробности для элемента списка ListView. ОК, я опубликую код за несколько минут. – user666