Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ViewFlow&;CircleFlowIndicator-空指针异常_Android_Viewflow - Fatal编程技术网

Android ViewFlow&;CircleFlowIndicator-空指针异常

Android ViewFlow&;CircleFlowIndicator-空指针异常,android,viewflow,Android,Viewflow,我正在使用ViewFlow和CircleFlowIndicator查看和显示圆圈指示查看中的更改 我仍然为每个视图显示相同的文本,请参见下图: 注意: 仍在文本视图1中显示“记住生活”,文本视图2中显示“即时搜索记忆中的朋友……” 现在我想基于查看位置显示文本,例如示例: 如果视图位置为0则需要在文本视图1中显示“文本视图-1.0”,文本视图2中显示“文本视图-2.0”,如果视图位置为1则需要在文本视图1中显示“文本视图-1.1,“TextView-2.1”在textView2和中,依此类推

我正在使用
ViewFlow
CircleFlowIndicator
查看
显示
圆圈
指示
查看中的更改

我仍然为每个
视图显示相同的文本,请参见下图:

注意:

仍在文本视图1中显示“
记住生活”
文本视图2中显示“
即时搜索记忆中的朋友……”

现在我想基于
查看位置
显示文本,例如
示例

如果视图
位置
0则需要在文本视图1中显示“
文本视图-1.0
”,文本视图2中显示“
文本视图-2.0
”,如果视图
位置
1则需要在文本视图1中显示“
文本视图-1.1
,“
TextView-2.1
”在textView2
中,依此类推

但每次,我都在
行号处得到
空指针异常
-35


这是:
position=viewFlow.getPositionForView(indi);

如何知道ViewFlow的当前视图位置? MainActivity.java:-

public class MainActivity extends Activity {

    private ViewFlow viewFlow;
    TextView textView1, textView2;
    int position = 0;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle(R.string.circle_title);
        setContentView(R.layout.screen_layout);

        viewFlow = (ViewFlow) findViewById(R.id.viewflow);
        viewFlow.setAdapter(new ImageAdapter(this), 1); // default focus on second circle

        CircleFlowIndicator indic = (CircleFlowIndicator) findViewById(R.id.viewflowindic);
        viewFlow.setFlowIndicator(indic);       

        textView1 = (TextView) findViewById(R.id.textView1);
        textView2 = (TextView) findViewById(R.id.textView2);

        position = viewFlow.getPositionForView(indic);
        Toast.makeText(MainActivity.this, position, Toast.LENGTH_LONG).show();

        switch (position) {
        case 0:
            textView1.setText("TextView - 1.0"); // TextView - 1, position - 0
            textView2.setText("TextView - 2.0"); // TextView - 2, position - 0
            break;

        case 1:
            textView1.setText("TextView - 1.1");
            textView2.setText("TextView - 2.1");
            break;

        case 2:
            textView1.setText("TextView - 1.2");
            textView2.setText("TextView - 2.2");
            break;

        case 3:
            textView1.setText("TextView - 1.3");
            textView2.setText("TextView - 2.3");
            break;

        case 4:
            textView1.setText("TextView - 1.4");
            textView2.setText("TextView - 2.4");
            break;

        default:

            break;
        }

    }

    /* If your min SDK version is < 8 you need to trigger the onConfigurationChanged in ViewFlow manually, like this */ 
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        viewFlow.onConfigurationChanged(newConfig); 
    }
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/com.indianic.viewflipperdemo"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

     <com.indianic.viewflipperdemo.widget.ViewFlow
        android:id="@+id/viewflow"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        app:sidebuffer="3" >
    </com.indianic.viewflipperdemo.widget.ViewFlow>

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/textView2"
        android:layout_centerHorizontal="true"
        android:text="Remember Life"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/viewflowindic"
        android:layout_centerHorizontal="true"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:padding="5dp"
        android:text="Instantly search memories of friends, season, birthdays, and more"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:orientation="horizontal"
        android:paddingBottom="10dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingTop="10dp" >

        <Button
            android:id="@+id/textView"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="left|center"
            android:layout_weight="1"
            android:text="Register"
            android:textColor="#000000" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:layout_weight="1"
            android:text="Login"
            android:textColor="#000000" />
    </LinearLayout>

    <com.indianic.viewflipperdemo.widget.CircleFlowIndicator
        android:id="@+id/viewflowindic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/linearLayout1"
        android:layout_centerHorizontal="true"
        android:padding="20dp"
        app:inactiveType="stroke" />

</RelativeLayout>
XML:-

public class MainActivity extends Activity {

    private ViewFlow viewFlow;
    TextView textView1, textView2;
    int position = 0;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTitle(R.string.circle_title);
        setContentView(R.layout.screen_layout);

        viewFlow = (ViewFlow) findViewById(R.id.viewflow);
        viewFlow.setAdapter(new ImageAdapter(this), 1); // default focus on second circle

        CircleFlowIndicator indic = (CircleFlowIndicator) findViewById(R.id.viewflowindic);
        viewFlow.setFlowIndicator(indic);       

        textView1 = (TextView) findViewById(R.id.textView1);
        textView2 = (TextView) findViewById(R.id.textView2);

        position = viewFlow.getPositionForView(indic);
        Toast.makeText(MainActivity.this, position, Toast.LENGTH_LONG).show();

        switch (position) {
        case 0:
            textView1.setText("TextView - 1.0"); // TextView - 1, position - 0
            textView2.setText("TextView - 2.0"); // TextView - 2, position - 0
            break;

        case 1:
            textView1.setText("TextView - 1.1");
            textView2.setText("TextView - 2.1");
            break;

        case 2:
            textView1.setText("TextView - 1.2");
            textView2.setText("TextView - 2.2");
            break;

        case 3:
            textView1.setText("TextView - 1.3");
            textView2.setText("TextView - 2.3");
            break;

        case 4:
            textView1.setText("TextView - 1.4");
            textView2.setText("TextView - 2.4");
            break;

        default:

            break;
        }

    }

    /* If your min SDK version is < 8 you need to trigger the onConfigurationChanged in ViewFlow manually, like this */ 
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        viewFlow.onConfigurationChanged(newConfig); 
    }
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/com.indianic.viewflipperdemo"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

     <com.indianic.viewflipperdemo.widget.ViewFlow
        android:id="@+id/viewflow"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        app:sidebuffer="3" >
    </com.indianic.viewflipperdemo.widget.ViewFlow>

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/textView2"
        android:layout_centerHorizontal="true"
        android:text="Remember Life"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/viewflowindic"
        android:layout_centerHorizontal="true"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:padding="5dp"
        android:text="Instantly search memories of friends, season, birthdays, and more"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:orientation="horizontal"
        android:paddingBottom="10dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingTop="10dp" >

        <Button
            android:id="@+id/textView"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="left|center"
            android:layout_weight="1"
            android:text="Register"
            android:textColor="#000000" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:layout_weight="1"
            android:text="Login"
            android:textColor="#000000" />
    </LinearLayout>

    <com.indianic.viewflipperdemo.widget.CircleFlowIndicator
        android:id="@+id/viewflowindic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/linearLayout1"
        android:layout_centerHorizontal="true"
        android:padding="20dp"
        app:inactiveType="stroke" />

</RelativeLayout>

异常原因: 您在onCreate方法中添加了用于更改文本的开关大小写。这是不正确的。用户输入应由处理

解决方案: 将侦听器添加到视图中。 当浏览视图时,侦听器将处理事件并根据位置更改文本

在视图中添加一个setOnViewSwitchListener,并覆盖onSwitched方法

示例代码: 参考资料:

    • 您问题的解决方案---

      在这里,您可以根据页面位置查找并自定义视图

      MainActivity.Java

      package com.example.circleindicatordemo;
      
      import java.util.ArrayList;
      
      import android.os.Bundle;
      import android.support.v4.app.Fragment;
      import android.support.v4.app.FragmentActivity;
      import android.support.v4.app.FragmentManager;
      import android.support.v4.app.FragmentPagerAdapter;
      import android.support.v4.view.ViewPager;
      import android.view.View;
      import android.view.View.OnClickListener;
      
      import com.viewpagerindicator.CirclePageIndicator;
      
      public class MainActivity extends FragmentActivity implements OnClickListener {
          MyAdapter mAdapter;
          ViewPager mPager;
          private CirclePageIndicator mIndicator;
          private static ArrayList<String> arrayList;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              arrayList = new ArrayList<String>();
              arrayList.add("Page1");
              arrayList.add("Page2");
              arrayList.add("Page3");
              arrayList.add("Page4");
              arrayList.add("Page5");
      
              mAdapter = new MyAdapter(getSupportFragmentManager());
              mPager = (ViewPager) findViewById(R.id.pager);
              mPager.setAdapter(mAdapter);
              mIndicator = (CirclePageIndicator) findViewById(R.id.indicator);
              mIndicator.setViewPager(mPager);
          }
      
          public static class MyAdapter extends FragmentPagerAdapter {
              public MyAdapter(FragmentManager fragmentManager) {
                  super(fragmentManager);
              }
      
              @Override
              public int getCount() {
                  return arrayList.size();
              }
      
              @Override
              public Fragment getItem(int position) {
                  return MyFragment.init(position, arrayList);
              }
          }
      
          @Override
          public void onClick(View v) {
      
          }
      
      }
      
      package com.example.circleindicatordemo;
      导入java.util.ArrayList;
      导入android.os.Bundle;
      导入android.support.v4.app.Fragment;
      导入android.support.v4.app.FragmentActivity;
      导入android.support.v4.app.FragmentManager;
      导入android.support.v4.app.FragmentPagerAdapter;
      导入android.support.v4.view.ViewPager;
      导入android.view.view;
      导入android.view.view.OnClickListener;
      导入com.viewpagerindicator.CirclePageIndicator;
      公共类MainActivity扩展FragmentActivity实现OnClickListener{
      MyAdapter mAdapter;
      可视寻呼机;
      专用环路指示器;
      私有静态ArrayList ArrayList;
      @凌驾
      创建时受保护的void(Bundle savedInstanceState){
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      arrayList=新的arrayList();
      arrayList.add(“第1页”);
      arrayList.add(“第2页”);
      arrayList.添加(“第3页”);
      arrayList.add(“第4页”);
      arrayList.添加(“第5页”);
      mAdapter=新的MyAdapter(getSupportFragmentManager());
      mPager=(ViewPager)findViewById(R.id.pager);
      mPager.setAdapter(mAdapter);
      mIndicator=(CirclePageIndicator)findViewById(R.id.indicator);
      mIndicator.setViewPager(mPager);
      }
      公共静态类MyAdapter扩展了FragmentPagerAdapter{
      公共MyAdapter(碎片管理器碎片管理器){
      超级(碎片管理器);
      }
      @凌驾
      public int getCount(){
      返回arrayList.size();
      }
      @凌驾
      公共片段getItem(int位置){
      返回MyFragment.init(位置,arrayList);
      }
      }
      @凌驾
      公共void onClick(视图v){
      }
      }
      
      Java--

      package com.example.circleindicatordemo;
      导入java.util.ArrayList;
      导入android.os.Bundle;
      导入android.support.v4.app.Fragment;
      导入android.view.LayoutInflater;
      导入android.view.view;
      导入android.view.view.OnClickListener;
      导入android.view.ViewGroup;
      导入android.widget.ImageView;
      导入android.widget.TextView;
      公共类MyFragment扩展了片段实现OnClickListener{
      内部位置;
      私有ArrayList ArrayList;
      私有文本视图tv_名称;
      私人影像查看iv_影像;
      静态MyFragment init(int位置,ArrayList ArrayList){
      MyFragment giftFragment=新的MyFragment();
      Bundle args=新Bundle();
      参数putInt(“位置”,位置);
      args.putSerializable(“数据”,arrayList);
      giftFragment.setArguments(args);
      返回礼物碎片;
      }
      @凌驾
      创建时的公共void(Bundle savedInstanceState){
      super.onCreate(savedInstanceState);
      position=getArguments().getInt(“position”);
      arrayList=(arrayList)getArguments().getSerializable(“数据”);
      }
      @凌驾
      CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
      视图=充气机。充气(R.layout.my_碎片,容器,假);
      tv_name=(TextView)view.findViewById(R.id.tv_name);
      iv_image=(ImageView)view.findViewById(R.id.iv_image);
      tv_name.setText(arrayList.get(position));
      返回视图;
      }
      @凌驾
      公共void onClick(视图arg0){
      //TODO自动生成的方法存根
      }
      }
      

      您还可以查看上述代码的完整源代码

      CircleviewLipperActivity.onCreate(CircleviewLipperActivity.java:35)position=viewFlow.getPositionForView(Indi);非常感谢:)我接受了您的回答,并将根据so规则在未来23小时内给您奖金
      package com.example.circleindicatordemo;
      
      import java.util.ArrayList;
      
      import android.os.Bundle;
      import android.support.v4.app.Fragment;
      import android.view.LayoutInflater;
      import android.view.View;
      import android.view.View.OnClickListener;
      import android.view.ViewGroup;
      import android.widget.ImageView;
      import android.widget.TextView;
      
      public class MyFragment extends Fragment implements OnClickListener {
          int position;
          private ArrayList<String> arrayList;
          private TextView tv_name;
          private ImageView iv_image;
      
          static MyFragment init(int position, ArrayList<String> arrayList) {
              MyFragment giftFragment = new MyFragment();
              Bundle args = new Bundle();
              args.putInt("position", position);
              args.putSerializable("data", arrayList);
              giftFragment.setArguments(args);
              return giftFragment;
          }
      
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              position = getArguments().getInt("position");
              arrayList = (ArrayList<String>) getArguments().getSerializable("data");
          }
      
          @Override
          public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
              View view = inflater.inflate(R.layout.my_fragment, container, false);
      
              tv_name = (TextView) view.findViewById(R.id.tv_name);
      
              iv_image = (ImageView) view.findViewById(R.id.iv_image);
              tv_name.setText(arrayList.get(position));
              return view;
          }
      
          @Override
          public void onClick(View arg0) {
              // TODO Auto-generated method stub
      
          }
      }