2016-08-22 78 views
-2

我在我的應用程序中使用了searchview。將搜索結果轉到不同的活動後,我遇到問題。這裏是顯示填充項目的listview的類。如果用戶決定不搜索項目,他們只需點擊一個項目,然後將其引導至其他活動。獲得搜索結果後打開另一個活動

public class ShowCourses extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_show_courses); 

    Toolbar courseToolbar = (Toolbar) findViewById(R.id.courses_toolbar); 
    setSupportActionBar(courseToolbar); 
    getSupportActionBar().setTitle(R.string.courses_toolbar); 


    String[] subjects = {"Art", "Math", Science"}; 

    ListAdapter subjectsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, subjects); 
    ListView DisplaySubjects = (ListView) findViewById(R.id.DisplaySubjects); 
    DisplaySubjects.setAdapter(subjectsAdapter); 


    DisplaySubjects.setOnItemClickListener(
      new AdapterView.OnItemClickListener(){ 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
        switch(position){ 
         case 0: 
          Intent art = new Intent(ShowCourses.this, art.class); 
          startActivity(art); 
          break; 
         case 1: 
          Intent math = new Intent(ShowCourses.this, math.class); 
          startActivity(math); 
          break; 
         case 2: 
          Intent science = new Intent(ShowCourses.this, science.class); 
          startActivity(science); 
          break; 
         default: 

          break; 
        } 
       } 
      }); 
} 

@Override 
protected void onResume(){ 
    super.onResume(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    getMenuInflater().inflate(R.menu.menu_main, menu); 

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

    return super.onCreateOptionsMenu(menu); 
} 

} 

這是顯示搜索結果的活動。如果用戶決定搜索可以說「數學」,那麼它將顯示一個僅顯示數學的列表視圖。

public class CoursesSearchResults extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_courses_search_results); 

    Toolbar courseToolbar = (Toolbar) findViewById(R.id.searchCourses_toolbar); //Creates Toolbar 
    setSupportActionBar(courseToolbar); 

    String query = new String(); 
    final Intent searchIntent = getIntent(); 
    if(Intent.ACTION_SEARCH.equals(searchIntent.getAction())){ 
     query = searchIntent.getStringExtra(SearchManager.QUERY); 
     getSupportActionBar().setTitle(query); 
     Toast.makeText(CoursesSearchResults.this, query, Toast.LENGTH_SHORT).show(); 
    } 

String[] subjects = {"Art", "Math", Science"}; 

    final ArrayList<String> searchResults = new ArrayList<String>(); 
    for(int i = 0; i < subjects.length; i++) { 
     if (subjects[i].toLowerCase().contains(query.toLowerCase())) { 
      searchResults.add(subjects[i]); 
     } 
    } 


    ListView courses = (ListView) findViewById(R.id.courses_search); 
    ListAdapter coursesAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, searchResults); 
    courses.setAdapter(coursesAdapter); 

    courses.setOnItemClickListener(
      new AdapterView.OnItemClickListener(){ 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
         switch(position){ 
         case 0: 
          Intent art = new Intent(ShowCourses.this, art.class); 
          startActivity(art); 
          break; 
         case 1: 
          Intent math = new Intent(ShowCourses.this, math.class); 
          startActivity(math); 
          break; 
         case 2: 
          Intent science = new Intent(ShowCourses.this, science.class); 
          startActivity(science); 
          break; 
         default: 

          break; 

       } 
      }); 
} 
} 

我遇到的問題是因爲我使用switch語句時單擊它取決於位置的項目。所以,如果我搜索「數學」,它將處於零位,如果我點擊它,它會引導我進入藝術活動。它需要導致數學活動而不是藝術活動。如果我搜索科學,它將處於零位。那麼如果我點擊科學,它會把我引向藝術活動,而不是科學活動。我怎樣才能從搜索結果中進行不同的活動?

+0

您可以使用此http:// stackoverflow.com/questions/14891026/get-clicked-item-from-listview –

+0

這可能會幫助你 –

回答

1

每當您搜索像數學這樣的關鍵字時,它都會在0位置出現,正確。 你有來檢查,如果現在的位置是零,然後通過意向Art.class

switch(position){ 
        case 0: 
         Intent art = new Intent(ShowCourses.this,art.class); 
         startActivity(art); 
         break; 

現在,無論任何你搜索的開關狀態,如果是在位置0讓它成爲你來回的ListView任何項目,點擊後會重定向到藝術活動。

所以,對這個問題有什麼我們能做的就是先檢查元素的類型,然後重定向到其他頁面that.For例子的基礎上: -

courses.setOnItemClickListener(
     new AdapterView.OnItemClickListener(){ 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
        String sub = parent.getItemAtPosition(int position).toString(); 
        if(sub.equals(subjects[0])){ 
         Intent art = new Intent(ShowCourses.this, art.class); 
         startActivity(art); 
         }else if(sub.equals(subjects[1])){ 
         Intent math = new Intent(ShowCourses.this, math.class); 
         startActivity(math); 
         }else if(sub.equals(subjects[2])){ 
         Intent science = new Intent(ShowCourses.this, science.class); 
         startActivity(science); 
         } 

     }); 
+0

工作就像一個魅力。謝謝! – user5960138