【发布时间】:2015-08-23 06:10:22
【问题描述】:
我遇到了与here 描述的问题类似的问题,该页面上的许多解决方案看起来都有效。问题是,我不知道我应该把他们写的代码放在哪里。我试过把它放在 onCreate 方法中,但它不起作用。我计划使用的解决方案是每次选择不同的项目时将静态数字设置为不同的 int,然后在创建页面时平滑滚动到该位置。不幸的是,如果我只是将它放入 onCreate 方法中,它似乎不起作用。我应该把它放在哪里? 如果你想看的话,我的代码在下面。
public class ElemSearch extends Periodic
{
private static int focusNum=22;
ListView mListView;
ArrayAdapter<String> adapter;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.elem_search_layout);
//This block is for the titlebar
ImageButton back = (ImageButton) findViewById(R.id.back_button);
back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ElemSearch.this, Periodic.class);
startActivity(intent);
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
}
});
//End titlebar block
//Search Bar code
final EditText inputSearch;
inputSearch = (EditText) findViewById(R.id.editText);
//Search Bar code continues later
Resources res = getResources();
final String[] elements = res.getStringArray(R.array.elements);
String[] myKeys = getResources().getStringArray(R.array.elements);
mListView = (ListView)findViewById(R.id.elemList);
adapter= new ArrayAdapter<String>(this, R.layout.list_item, R.id.product_name,elements );
mListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myKeys));
final List<String> elemList = Arrays.asList(getResources().getStringArray(R.array.elements));
//Search Bar code continues
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
ElemSearch.this.adapter.getFilter().filter(cs);
ArrayList<String> temp = new ArrayList<String>();
int textlength = inputSearch.getText().length();
temp.clear();
for (int i = 0; i < elemList.size(); i++) {
if (textlength <= elemList.get(i).length()) {
if (inputSearch.getText().toString().equalsIgnoreCase(
(String)
elemList.get(i).subSequence(0,
textlength))) {
temp.add(elemList.get(i));
}
}
}
mListView.setAdapter(new ArrayAdapter<String>(ElemSearch.this, android.R.layout.simple_list_item_1, temp));
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
//mListView is list view type
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
//note that because arrays make zero sense and start at 0, the position is one int less than
//the element's atomic number.
initializeList(position);
//Intent n = new Intent(getApplicationContext(), MainActivity.class);
//n.putExtra("position", position);
//startActivity(n);
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
mListView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
}
});
ImageButton toTop = (ImageButton) findViewById(R.id.topButton);
toTop.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
mListView.smoothScrollToPosition(0);
mListView.setFastScrollEnabled(true);
v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
}
});
}
public void initializeList(int position)
{
Intent n;
if(position==0)
{
n = new Intent(getApplicationContext(), Hydrogen.class);
n.putExtra("position", position);
startActivity(n);
focusNum=0;
}
if(position==1)
{
n = new Intent(getApplicationContext(), Helium.class);
n.putExtra("position", position);
startActivity(n);
focusNum=1;
}
if(position==2)
{
n = new Intent(getApplicationContext(), Lithium.class);
n.putExtra("position", position);
startActivity(n);
focusNum=2;
}
if(position==3)
{
n = new Intent(getApplicationContext(), Beryllium.class);
n.putExtra("position", position);
startActivity(n);
focusNum=3;
}
if(position==4)
{
n = new Intent(getApplicationContext(), Boron.class);
n.putExtra("position", position);
startActivity(n);
focusNum=4;
}
if(position==5)
{
n = new Intent(getApplicationContext(), Carbon.class);
n.putExtra("position", position);
startActivity(n);
focusNum=5;
}
if(position==6)
{
n = new Intent(getApplicationContext(), Nitrogen.class);
n.putExtra("position", position);
startActivity(n);
focusNum=6;
}
if(position==7)
{
n = new Intent(getApplicationContext(), Oxygen.class);
n.putExtra("position", position);
startActivity(n);
focusNum=7;
}
if(position==8)
{
n = new Intent(getApplicationContext(), Flourine.class);
n.putExtra("position", position);
startActivity(n);
focusNum=8;
}
if(position==9)
{
n = new Intent(getApplicationContext(), Neon.class);
n.putExtra("position", position);
startActivity(n);
focusNum=9;
}
if(position==10)
{
n = new Intent(getApplicationContext(), Sodium.class);
n.putExtra("position", position);
startActivity(n);
focusNum=10;
}
if(position==11)
{
n = new Intent(getApplicationContext(), Magnesium.class);
n.putExtra("position", position);
startActivity(n);
focusNum=11;
}
if(position==12)
{
n = new Intent(getApplicationContext(), Aluminum.class);
n.putExtra("position", position);
startActivity(n);
focusNum=12;
}
if(position==13)
{
n = new Intent(getApplicationContext(), Silicon.class);
n.putExtra("position", position);
startActivity(n);
focusNum=13;
}
if(position==14)
{
n = new Intent(getApplicationContext(), Phosphorus.class);
n.putExtra("position", position);
startActivity(n);
focusNum=14;
}
if(position==15)
{
n = new Intent(getApplicationContext(), Sulfur.class);
n.putExtra("position", position);
startActivity(n);
focusNum=15;
}
if(position==16)
{
n = new Intent(getApplicationContext(), Chlorine.class);
n.putExtra("position", position);
startActivity(n);
focusNum=16;
}
if(position==17)
{
n = new Intent(getApplicationContext(), Argon.class);
n.putExtra("position", position);
startActivity(n);
focusNum=17;
}
if(position==18)
{
n = new Intent(getApplicationContext(), Potassium.class);
n.putExtra("position", position);
startActivity(n);
focusNum=18;
}
if(position==19)
{
n = new Intent(getApplicationContext(), Calcium.class);
n.putExtra("position", position);
startActivity(n);
focusNum=position;
}
if(position==20)
{
n = new Intent(getApplicationContext(), Scandium.class);
n.putExtra("position", position);
startActivity(n);
focusNum=position;
}
if(position==21)
{
n = new Intent(getApplicationContext(), Titanium.class);
n.putExtra("position", position);
startActivity(n);
focusNum=position;
}
if(position==22)
{
n = new Intent(getApplicationContext(), Vanadium.class);
n.putExtra("position", position);
startActivity(n);
focusNum=position;
}
if(position==23)
{
n = new Intent(getApplicationContext(), Chromium.class);
n.putExtra("position", position);
startActivity(n);
focusNum=position;
}
if(position==24)
{
n = new Intent(getApplicationContext(), Manganese.class);
n.putExtra("position", position);
startActivity(n);
focusNum=position;
}
if(position==25)
{
n = new Intent(getApplicationContext(), Iron.class);
n.putExtra("position", position);
startActivity(n);
focusNum=position;
}
if(position==26)
{
n = new Intent(getApplicationContext(), Cobalt.class);
n.putExtra("position", position);
startActivity(n);
focusNum=position;
}
if(position==27)
{
n = new Intent(getApplicationContext(), Nickel.class);
n.putExtra("position", position);
startActivity(n);
focusNum=position;
}
if(position==28)
{
n = new Intent(getApplicationContext(), Copper.class);
n.putExtra("position", position);
startActivity(n);
focusNum=position;
}
if(position==29)
{
n = new Intent(getApplicationContext(), Zinc.class);
n.putExtra("position", position);
startActivity(n);
focusNum=position;
}
}
@Override
protected void onResume()
{
super.onResume();
mListView.smoothScrollToPosition(focusNum);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
【问题讨论】:
-
在 onResume() 上试试这个
-
试过了。还是不行。 :/ 如果你想看,我附上了我的代码。
-
尝试 setRetainInstance(true);如果 Periodic 是 Fragment 的子类
-
我的周期性已经扩展了主活动,所以它不是片段的子。有什么办法吗?
标签: android listview smooth-scrolling