2013-09-27 99 views
1

我有一個包含搜索欄和搜索活動的主要活動。當我在搜索欄中輸入一個字符串並按回車時,搜索活動被調用。我正在嘗試從search-activity更新main-activity中的listview,但這不起作用。怎麼了? THX無法更新其他活動的ListView

public class MainActivity extends Activity { 
static List<String> valueList; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    valueList = new ArrayList<String>(); 

    MainActivity.valueList.add("eins"); 
    MainActivity.valueList.add("zwei"); 
    MainActivity.valueList.add("drei"); 
    MainActivity.valueList.add("vier"); 
    MainActivity.valueList.add("fünf"); 
    MainActivity.valueList.add("sechs"); 

    ListAdapter adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, MainActivity.valueList); 

    final ListView lv = (ListView)findViewById(R.id.listView1); 

    lv.setAdapter(adapter); 

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) 
     { } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.options_menu, menu); 

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 

    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(false); 

    return true; 
} 

}

public class SearchableActivity extends Activity { 
ListView lv; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_searchable); 

    android.util.Log.v("my_search", "onCreate()"); 
    handleIntent(getIntent()); 
} 

@Override 
protected void onNewIntent(Intent intent) { 
    android.util.Log.v("my_search", "onNewIntent()"); 
    handleIntent(intent); 
} 

private void handleIntent(Intent intent) { 

    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     String query = intent.getStringExtra(SearchManager.QUERY); 

     android.util.Log.v("my_search", "handleIntent()"); 
     android.util.Log.v("my_search", "Query: "+query); 

     TextView tv; 
     tv=(TextView) findViewById(R.id.textview_searchable); 
     tv.setText("Suche nach: "+query); 
     doMySearch(query); 
    } 
} 

public void doMySearch(String query) 
{ 
    List<String> valueList_new = new ArrayList<String>(); 

    for(String s : MainActivity.valueList) { 
     if(s.contains(query)) { 
      android.util.Log.v("my_search", "gefunden: "+s); 
      valueList_new.add(s); 
     } 
    } 

    setContentView(R.layout.activity_main); 
    lv=(ListView)findViewById(R.id.listView1); 

    ArrayAdapter adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, valueList_new); 
    lv.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 

    finish(); 
} 

}

+0

什麼不工作? – Szymon

+0

我希望doMySearch用valueList_new的內容填充listview。但列表視圖仍然是相同的:( – NoobieNoob

+0

如果u使用的另一項活動只​​是爲了更新主要活動,那麼爲什麼不ü使用onActivityResult –

回答

0

剛剛嘗試這個代碼

public void doMySearch(String query) 
       { 
        List<String> valueList_new = new ArrayList<String>(); 

        for (int i = 0; i < MainActivity.valueList.size(); i++) { 
         if((valueList.get(i).contains(query))) 
         { 
          valueList_new.add(valueList.get(i)); 
         } 
        } 
         } 
+0

添加一個新的活動,這些值是正確的,只是適配器沒有正確設置。 – NoobieNoob

+0

只需添加一個for循環,它會將所有值添加到列表中 – Ameer

1

我敢肯定,這個選擇是不是最好的方式,但我不知道怎麼解決它一次。 嘗試在MainActivity中保留要顯示的值的屬性(public static List)。

現在,請設置您apadter每次活動來到前臺:

@Override 
public void onResume(){ 

    adapter = new ExpandListAdapter(MainActivity.this, valueList); 
    lv.setAdapter(adapter); 
    super.onResume(); 
} 

因此,您只需從SearchableActivity編輯值列表和ListView控件會自動更新。

如果你不喜歡的公共屬性,你可以實現包含Protected static List一個超活性。這兩個活動都應該繼承超級。

但無論如何,你不能直接從在MainActivity內把手的意圖是什麼?

0

您不能通過新的其他適配器更新列表視圖。
ListView只有1個適配器,這是第一次爲listview設置dapter。
要更新列表視圖,您需要更新適配器的數據。
參考:Update ListView items from another class