【问题标题】:Listview scroll position not save with Navigation back buttonListview滚动位置不使用导航返回按钮保存
【发布时间】:2017-07-19 16:37:08
【问题描述】:

我有列表视图。它有+200个项目。我在所有页面中添加了返回按钮操作栏。工作起来不舒服。如果我按下设备的后退按钮 Listview 的滚动位置相同,但是,如果我按下导航返回按钮 Listview 的滚动位置进入开始位置。如何使用导航返回按钮保存 Listview 位置?

MainActivity.java

public class MainActivity extends AppCompatActivity {
 ListView listView;
 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setTitle("Car");


    listView = (ListView) findViewById(R.id.Listview);

    final String[] values = new String[]{"audi", "bmw", "chevrolet", "citroen", "dacia", "ferrari", "fiat", "ford", "honda", "hyundai", "jaguar", "lamborghini", "lotus", "mazda", "mercedes", "mitsubishi", "opel", "peugeot", "renault", "toyota", "END"};
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, android.R.id.text1, values);
    listView.setAdapter(adapter);



    bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavigationView);

    bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {

            int id = item.getItemId();

            if (id == R.id.id_motorcycle) {

                Intent intentmoto = new Intent(MainActivity.this, motorcycle.class);
                startActivity(intentmoto);


                return true;

            }


            return false;
        }
    });

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            if (position == 0) {
                Intent myintent = new Intent(view.getContext(), audi.class);
                startActivityForResult(myintent, 0);
            }
            if (position == 1) {
                Intent myintent = new Intent(view.getContext(), bmw.class);
                startActivityForResult(myintent, 1);
            }
            if (position == 2) {
                Intent myintent = new Intent(view.getContext(), chevrolet.class);
                startActivityForResult(myintent, 2);
            }
            if (position == 3) {
                Intent myintent = new Intent(view.getContext(), citroen.class);
                startActivityForResult(myintent, 3);
            }
            if (position == 4) {
                Intent myintent = new Intent(view.getContext(), dacia.class);
                startActivityForResult(myintent, 4);

            }
            if (position == 5) {
                Intent myintent = new Intent(view.getContext(), ferrari.class);
                startActivityForResult(myintent, 5);
            }
            if (position == 6) {
                Intent myintent = new Intent(view.getContext(), fiat.class);
                startActivityForResult(myintent, 6);
            }
            if (position == 7) {
                Intent myintent = new Intent(view.getContext(), ford.class);
                startActivityForResult(myintent, 7);
            }
            if (position == 8) {
                Intent myintent = new Intent(view.getContext(), honda.class);
                startActivityForResult(myintent, 8);
            }
            if (position == 9) {
                Intent myintent = new Intent(view.getContext(), hyundai.class);
                startActivityForResult(myintent, 9);
            }
            if (position == 10) {
                Intent myintent = new Intent(view.getContext(), jaguar.class);
                startActivityForResult(myintent, 10);
            }
            if (position == 11) {
                Intent myintent = new Intent(view.getContext(), lamborgini.class);
                startActivityForResult(myintent, 11);
            }
            if (position == 12) {
                Intent myintent = new Intent(view.getContext(), lotus.class);
                startActivityForResult(myintent, 12);
            }
            if (position == 13) {
                Intent myintent = new Intent(view.getContext(), mazda.class);
                startActivityForResult(myintent, 13);
            }
            if (position == 14) {
                Intent myintent = new Intent(view.getContext(), mercedes.class);
                startActivityForResult(myintent, 14);
            }
            if (position == 15) {
                Intent myintent = new Intent(view.getContext(), mitsubishi.class);
                startActivityForResult(myintent, 15);
            }
            if (position == 16) {
                Intent myintent = new Intent(view.getContext(), opel.class);
                startActivityForResult(myintent, 16);
            }
            if (position == 17) {
                Intent myintent = new Intent(view.getContext(), peugeot.class);
                startActivityForResult(myintent, 17);
            }
            if (position == 18) {
                Intent myintent = new Intent(view.getContext(), renault.class);
                startActivityForResult(myintent, 18);
            }
            if (position == 19) {
                Intent myintent = new Intent(view.getContext(), toyota.class);
                startActivityForResult(myintent, 19);

            }



        }


    });


}






@Override
public void onStop() {
    super.onStop();











}

AndroidManifest.xml

 <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity"
        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".audi"
        android:parentActivityName=".MainActivity" />
    <activity
        android:name=".bmw"
        android:parentActivityName=".MainActivity" />
    <activity
        android:name=".chevrolet"
        android:parentActivityName=".MainActivity"/>
    <activity
        android:name=".citroen"
        android:parentActivityName=".MainActivity"/>
    <activity
        android:name=".dacia"
        android:parentActivityName=".MainActivity"/>
    <activity
        android:name=".ferrari"
        android:parentActivityName=".MainActivity"/>
    <activity
        android:name=".fiat"
        android:parentActivityName=".MainActivity"/>
    <activity
        android:name=".ford"
        android:parentActivityName=".MainActivity"/>
    <activity
        android:name=".honda"
        android:parentActivityName=".MainActivity"/>
    <activity
        android:name=".hyundai"
        android:parentActivityName=".MainActivity"/>
    <activity
        android:name=".jaguar"
        android:parentActivityName=".MainActivity"/>
    <activity
        android:name=".lamborgini"
        android:parentActivityName=".MainActivity"/>
    <activity
        android:name=".lotus"
        android:parentActivityName=".MainActivity"/>
    <activity
        android:name=".mazda"
        android:parentActivityName=".MainActivity"
        />
    <activity
        android:name=".mercedes"
        android:parentActivityName=".MainActivity"/>
    <activity
        android:name=".mitsubishi"
        android:parentActivityName=".MainActivity"/>
    <activity
        android:name=".opel"
        android:parentActivityName=".MainActivity"/>
    <activity
        android:name=".peugeot"
        android:parentActivityName=".MainActivity" />
    <activity android:name=".renault"
        android:parentActivityName=".MainActivity"/>
    <activity android:name=".toyota"
        android:parentActivityName=".MainActivity"/>
    <activity android:name=".motorcycle">

    </activity>
</application>

+200 pages.java

getSupportActionBar().setDisplayShowHomeEnabled(true);

【问题讨论】:

  • 您有 200 多个活动吗?哇!你的 apk 大小是多少?
  • 只有 28 MB。
  • 请看我的回答

标签: android listview scroll navigationbar


【解决方案1】:

看这个:

Parcelable state;

@Override
public void onPause() {    
    // Save ListView state @ onPause
    Log.d(TAG, "saving listview state @ onPause");
    state = listView.onSaveInstanceState();
    super.onPause();
}
...

@Override
public void onViewCreated(final View view,     Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    // Set new items
    listView.setAdapter(adapter);
    ...
    // Restore previous state (including selected item index and scroll position)
    if(state != null) {
        Log.d(TAG, "trying to restore listview state..");
        listView.onRestoreInstanceState(state);
    }
}

【讨论】:

  • 我添加了,但它仍然无法正常工作。我认为这与 bottomNavigationView 无关。
  • 我想我误解了你的问题。让我更新我的答案
  • 好的。我在等你。
  • 这段代码给了我 3 个错误。错误:(80, 5) 错误: 方法没有覆盖或实现超类型中的方法 错误:(82, 14) 错误: 找不到符号方法 onViewCreated(View,Bundle) 错误:(84, 29) 错误: 找不到符号变量适配器
  • 我找到了解决方案。私有静态 Parcelable mListViewScrollPos = null; if (mListViewScrollPos != null) { listView.onRestoreInstanceState(mListViewScrollPos); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // 保存 ListView 位置 mListViewScrollPos = listView.onSaveInstanceState(); }
猜你喜欢
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
相关资源
最近更新 更多