2015-04-06 30 views
0

我有幾個活動,其中一些有listviews。當點擊那些列表視圖中的項目時,背景和文本顏色將突出顯示,並且下一個活動將啓動。我有自定義後退按鈕可以回到以前的活動。我想知道是否有一種方法可以保留先前按下的listview中背景和文本顏色的亮點,當我點擊後退按鈕時。這裏是一個示例代碼:記住選定的背景和文字顏色突出顯示活動

public class Act1 extends Activity { 
//code to create arrays and adapters, populate listview and so on 
ListView listParams = (ListView) findViewById(R.id.lvParams); 
listParams.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent,View viewClicked, int position, long id) { 
        viewClicked.setSelected(true); 
        SelectedParam = String.valueOf(parent.getItemAtPosition(position)); 
        Editor editor = sharedpreferences.edit(); 
        editor.putString("SelectedParam", SelectedParam); 
        editor.commit(); 
        Intent goToAct2= new Intent(getApplicationContext(),Act2.class); 
        startActivity(goToAct2); 
       } 
      }); 

我有xml選擇器來更改所選項目的顏色(此處未顯示...)。現在,當我在第二個活動,我想回去的第一個活動,所以我連接功能的GoBack的按鈕:

goBack(View V){ 
    Intent goToAct1 = new Intent(Act2.this, Act1.class); 
    startActivity(goToAct1); 
} 

當我回來活性1,我想我的列表視圖來記住以前的選擇並在列表視圖中突出顯示它。現在,當我在手機上使用導航鍵時,突出部分被記住了......有沒有辦法模仿這種情況。或者也許有一個更簡單的方法。請幫助:)

+0

是的,您可以在返回活動時更改listitem佈局的背景顏色。您已經存儲了listitem的值。存儲ID將非常有益。 – Aakash 2015-04-06 01:35:02

+0

'startActivityForResult(Intent intent,int requestCode)'可以解決你的問題。 – li2 2015-04-06 01:48:43

+0

您的第一個活動已存儲在** [back stack](http://developer.android.com/guide/components/tasks-and-back-stack.html)**中,所以當您想要導航回activity1從activity2開始,你只需要完成activity2,如果你按下了actionbar的後退按鈕或其他與你的** goback按鈕相關的函數,你可以重寫onNavigateUp()方法** – li2 2015-04-06 01:59:50

回答

0

使用onSavedInstanceState(...)保存選定的位置:

private static int selectedPos = -1; 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("selected", selectedPos); 

} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    selectedPos = savedInstanceState.getInt("selected"); 

} 

//get seleted position when click item 
@Override 
public void onItemClick(AdapterView<?> parent,View viewClicked, int position, long id) { 
        ... ... 
        selectedPos = position; 
        ... ... 
       } 

最後,在你的atapter的getView(...),加臺詞:

if(selectedPos == position) 
     convertView.setSelected(true);  

希望這有助於!

+0

感謝您的回答。你是什​​麼意思getView適配器?我沒有那個功能..我用我的適配器填充: adapterParams = new ArrayAdapter (this,R.layout.text1,R.id.text1_name,Params); listParams.setAdapter(adapterParams); – 2015-04-07 14:29:16

+0

您的ListView的適配器,這是自定義的ArrayAdapter,需要重寫'getView(...)' – Xcihnegn 2015-04-07 15:32:07

+0

@Andre Bounames你的問題,這個答案解決或幫助它 – Xcihnegn 2015-04-21 06:31:40

相關問題