2017-01-06 6 views
0

Так что я пытаюсь использовать viewpager для прокрутки между экранами. Я пытаюсь сделать это без использования фрагмента, но я не могу заставить его работать. Я получаю сообщение об ошибке на строке 59, которая является mViewPager.setAdapter (mCustomPagerAdapter); для исключения нулевого указателя при попытке установить мой адаптер. Я ушел от примера, который я нашел здесь. Я думаю, что я нахожусь в своей голове с этим, это мой первый раз, пытаясь использовать пейджер представления.Просмотр пейджера без фрагмента не работает

Heres мой маршрут детали деятельности, где я пытаюсь Настраивает адаптер

public class RouteDetails extends AppCompatActivity { 


CustomPagerAdapter mCustomPagerAdapter; 
ViewPager mViewPager; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_route_details); 

    dbHandler = new MyDBHandler(this, null, null, 1); 


    //route detail xml array info 
    final CharSequence[] routeDetail= getResources().getTextArray(R.array.routeDetail); 

///array of route images 
    final TypedArray image = getResources().obtainTypedArray(R.array.routeImages); 

    /////// 

    mCustomPagerAdapter = new CustomPagerAdapter(this, routeDetail, image); 
    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mCustomPagerAdapter); 

    /////// 
} 

и ЭРВО мою CustomPagerAdapter

class CustomPagerAdapter extends PagerAdapter { 

CharSequence[] routeDetail; 
TypedArray routeImageId; 
Context mContext; 
LayoutInflater mLayoutInflater; 

public CustomPagerAdapter(Context context, CharSequence[] routeDetail, TypedArray routeImageId) { 
    mContext = context; 
    mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    this.routeDetail = routeDetail; 
    this.routeImageId = routeImageId; 
} 

@Override 
public int getCount() { 
    return routeDetail.length; 
} 

@Override 
public boolean isViewFromObject(View view, Object object) { 
    return view == ((LinearLayout) object); 
} 

@Override 
public Object instantiateItem(ViewGroup container, int position) { 
    View itemView = mLayoutInflater.inflate(R.layout.activity_route_details, container, false); 

    TextView routeText = (TextView) itemView.findViewById(R.id.routeDetailsView); 
    routeText.setText(routeDetail[position]); 

    final int imageId = routeImageId.getResourceId(position, 0); 
    ImageView imageView = (ImageView) itemView.findViewById(R.id.routeImage); 
    imageView.setImageResource(imageId); 

    container.addView(itemView); 
    return itemView; 
} 

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    container.removeView((LinearLayout) object); 
} 

}

Спасибо за любую помощь!

редактировать: добавлять relvant XML-файлы

activity_route_details.xml

<?xml version="1.0" encoding="utf-8"?> 

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/scrollView1" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_route_details" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.example.zach.BirdsboroClimbing.RouteDetails"> 


<CheckBox 
    android:text="Route Climbed" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/routeCheckBox" 
    android:gravity="center" /> 

<TextView 
    android:text="TextView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/routeDetailsView" 
    android:textSize="18sp" 
    android:textAlignment="center" 
    android:textColor="@android:color/black" 
    android:layout_below="@id/routeCheckBox"/> 


<ImageView 
    android:layout_below="@id/routeDetailsView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/routeImage" 
    android:scaleType="fitCenter" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:adjustViewBounds="true" /> 


</RelativeLayout> 
</ScrollView> 

pager_route_details.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 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

</LinearLayout> 

и routeListViewItems.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

<string-array name="routeDetail"> 
<item><b>Shark Bait - 5.9</b>\n\n \u25BA 2 draws + 2 for anchor.\n</item> 
    <item><b>Rain Check - 5.8</b>\n\n \u25BA 3 draws + 2 for anchor.\n</item> 
    <item><b>Rain Check Direct - 5.8</b>\n\n \u25BA 4 draws + 2 for anchor.\n</item> 
    <item><b>Arocknophobia - 5.7</b>\n\n \u25BA 3 draws + 2 for anchor.\n</item> 
    <item><b>Balls Deep - 5.9+</b>\n\n \u25BA 3 draws + 2 for anchor.\n</item> 
    <item><b>Jingle Bells - 5.9</b>\n\n \u25BA 4 draws + 2 for anchor.\n</item> 
    <item><b>Itching to Climb - 5.8</b>\n\n \u25BA 5 draws + 2 for anchor.\n</item> 

</string-array> 

<integer-array name="routeImages"> 

<item>@drawable/sharkbait</item> 
<item>@drawable/raincheck</item> 
<item>@drawable/raincheckdirect</item> 
<item>@drawable/arocknophobia</item> 
<item>@drawable/ballsdeep</item> 
<item>@drawable/jinglebells</item> 
<item>@drawable/itchingtoclimb</item> 

</integer-array> 
</resources> 

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

Спасибо!

+0

Вы можете предоставить больше информации, подобной журналам. Мы даже не знаем, что такое строка 59. –

+0

Sry line 59 - mViewPager.setAdapter (mCustomPagerAdapter); Я выложу полный журнал, когда попаду на свой компьютер. – zsh5032

+0

Я попытался реализовать свой код сам, он выглядит нормально, и он работает для меня, вы можете размещать соответствующие XML-файлы, чтобы я мог увидеть, в чем проблема. – YYJo

ответ

2

Вы устанавливаете ур макет деятельности в качестве activity_route_details.xml, который не содержит ViewPager товар, но pager_route_details

В RouteDetails.java изменить эту строку

setContentView(R.layout.activity_route_details); 

с

setContentView(R.layout.route_details); 
+0

спасибо, поэтому я попробовал ваш код, и теперь я получаю сообщение об ошибке в строке 36 моего CustomPagerAdapter, которая является общедоступной. Boolean isViewFromObject (View view, Object object) { return view == ((LinearLayout) object); } ошибка java.lang.ClassCastException: android.widget.ScrollView не может быть отнесен к android.widget.LinearLayout at com.example.zach.BirdsboroClimbing.CustomPagerAdapter.isViewFromObject (CustomPagerAdapter.java:36) – zsh5032

+0

Попробуйте удалить трансляцию , '==' вам не нужно бросать объект или использовать метод 'equals' вместо' == 'в любом случае удалять бросок, я не думаю, что это необходимо – YYJo

+0

Я понял! Я изменил view.equals (объект); но затем я получал ошибку в строке 41, говоря, что представление прокрутки может иметь только один прямой дочерний элемент, поэтому я вложил кнопку, текстовое изображение и изображение в другую линейную компоновку. Мне также пришлось изменить свой относительный макет на линейный макет. И, наконец, мне пришлось переместить scrollview с внешнего линейного макета внутри линейного макета. Но я соглашусь с ответом uguboz как правильным ответом, так как это заставило меня пройти мою первоначальную ошибку. Всем спасибо! – zsh5032

0

Есть 2 вещи, которые могут вызвать проблемы

A. Вы не используете правильный макет для вашего RouteDetails деятельности вы должны надуть один с ViewPager в нем

R.layout.pager_route_details 

вместо

R.layout.activity_route_details 

B. Внутри вашего адаптера, вы должны удалить бросание до LinearLayout Оператор == не требует, чтобы вы бросали предметы. Я бы посоветовал вам использовать

view.equals(object) 

Должен работать сейчас.