Это мое решение:
myViewPager.java
public class myViewPager extends PagerAdapter {
public myViewPager (Context context) {
this.context = context;
}
@Override
public int getCount() {
return rank.length+2;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// Declare Variables
TextView textViewRank;
//Log.i(TAG, "get position = "+position);
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.viewpager_item, container,
false);
textViewRank= (TextView) itemView.findViewById(R.id.textView1);
if (position == getCount() - 1) {
textViewRank.setText(rank[0]);
} else if (position == 0) {
textViewRank.setText(rank[rank.length-1]);
} else {
textViewRank.setText(rank[position-1]);
}
((ViewPager) container).addView(itemView);
return itemView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
viewpager_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/textView1"/>
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getName();
public static String[] rank;
myViewPager adapter;
private ViewPager viewPager;
private static int currentPage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rank = new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
viewPager = (ViewPager) findViewById(R.id.view_pager);
adapter = new myViewPager(this);
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
Log.i(TAG, "onPageSelected = "+position);
currentPage = position;
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// not needed
}
@Override
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_IDLE) {
int pageCount = rank.length+2;
if (currentPage == pageCount-1){
viewPager.setCurrentItem(1,false);
} else if (currentPage == 0){
viewPager.setCurrentItem(pageCount-2,false);
}
}
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
Предполагается, что массив состоит из 10 элементов. Затем «добавить» 2 фиктивных элемента, но не добавить. Когда вызывается функция get_count, просто вернуть size = 10 + 2 элемента.
манекен e [0] e [1] e [2] e [3] e [4] e [5] e [6] e [7] e [8] e [9] dummy
В viewPager.addOnPageChangeListener:
при переходе к последнему элементу viewPager должен установить первый элемент следующим.
if (currentPage == pageCount-1){
viewPager.setCurrentItem(1,false);
}
при переходе к первому элементу viewPager должен установить последний элемент следующим.
else if (currentPage == 0){
viewPager.setCurrentItem(pageCount-2,false);
}
InIntiateItem:
if (position == getCount() - 1) {
textViewRank.setText(rank[0]);
} else if (position == 0) {
textViewRank.setText(rank[rank.length-1]);
} else {
textViewRank.setText(rank[position-1]);
}
В этом случае он ищет формат NSString. Посмотрите здесь подробные сведения о строке формата .
Если вы хотите, чтобы отрицательное значение 12,345,67
отображалось как -12,345,67
, то я считаю, что правильным значением NSString является @ "- #, ## 0.00"
Я также заметил следующее предложение в документе, ссылка на который приведена выше:
Если вы не укажете формат для отрицательные значения, указанный формат для положительных значений используется предшествующий знаком минус (-).
РЕДАКТИРОВАТЬ:
Обновление для 10.4 и более поздних версий: Вот PDF-файл с описанием поведения в 10.4 и более поздних версиях
И, как указано в этом документе, здесь данные о необходимом формате для 10.4 и более поздних версий .
исходное видение Git (еще в апреле 2005 г.). Если вы согласны с этим, скорее всего, Git предоставит то, что вы хотите. Вкратце:
- "файлы" значения не имеют. Единственное, что имеет значение, это то, как «контент» перемещался в дереве
- . У вас есть SCM, который отслеживает, что изменилось на единственном уровне, который действительно имеет значение, а именно во всем проекте. Никакая информация на самом деле не имеет никакого смысла при меньшей степени детализации, поскольку по определению «проект» зависит от других файлов, иначе он не был бы проектом
. Понятие «весь проект» на самом деле является сильной стороной и ограничение для Git с точки зрения управления проектами: вы не должны стремиться помещать все в один репозиторий Git.
Это будет сводиться к личным предпочтениям, просто и понятно. .
Я использую Bazaar, и это очень просто. Концепция промежуточной области в Git дает некоторую гибкость, но также добавляет сложности. Вы можете довольно легко управлять кодом в Bazaar с помощью чего-то вроде 4 команд (добавить, зафиксировать, объединить (может быть, push / pull) и log или qlog), и вам нужно только объединение, если вам нужно несколько веток.
Обычно Bazaar, кажется, делает это. правильная вещь. У меня никогда не было проблем с тем, чтобы он делал что-то глупое или позволял мне делать что-то глупое.
Я думаю, это зависит от вашего личного вкуса - есть аргументы в пользу обоих. Я активно использовал bzr для личных проектов в течение нескольких лет, начиная с 0.8 дней, но я перешел на git в прошлом году и никогда не оглядывался назад, по крайней мере, для управления исходным кодом.
Мне слишком лень переписывать свои собственное впечатление , но подведем итог:
Единственное, что Git делает намного лучше, - это обрабатывает множество веток. Он делает это намного быстрее, чем bzr, и не требует нескольких копий исходного кода. Все ветки находятся в одном каталоге. Я обнаружил, что использую ветки git гораздо чаще, чем с bzr, особенно потому, что мое репо не маленькое и также включает двоичные файлы (всего 180 МБ).
РЕДАКТИРОВАТЬ : На самом деле, я ошибаюсь. --no-tree + lightweight checkout работает как Git. Спасибо, FryGuy. О, и я нашел эту запись в блоге , в которой есть полезная информация.
Bazaar is очень хорошо интегрирован с ubuntu, я использую ubuntu уже много лет, устал переходить на другой, более вызывающий дистрибутив, но нет смысла. Я предпочитаю bazaar git / mercurial coz bazaar - уведомления очень хорошо интегрированы в Ubuntu. Вдобавок вы получаете бесплатный хостинг от Launchpad, что является огромным плюсом.