2016-06-06 3 views
0

Я создал список, и когда я нажимаю элемент, он фильтрует и отображает элементы, которые отфильтровываются по тому, что я нажал. Мы можем думать, что это похоже на дерево. Мой вопрос в том, когда я нахожу последний элемент «как я могу вернуться на один шаг в этом списке?». Когда я нажимаю кнопку возврата устройства, он возвращает основную активность, но я хочу только вернуться обратно в этот список.Android ListView Back Button

OsbItemsListActivity.java

public class OsbItemsListActivity extends AppCompatActivity { 
    private ListView sobItemsListView; 
    private Activity mContext; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_osb_items_list); 
     mContext = this; 
     Intent intent = getIntent(); 
     if(null != intent){ 
      sobItemsListView = (ListView)findViewById(R.id.activity_osb_items_list_view); 
      SobItemsAdapter sobItemsAdapter = new SobItemsAdapter(mContext); 
      sobItemsListView.setAdapter(sobItemsAdapter); 
      sobItemsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        String clickedItem = (String) parent.getAdapter().getItem(position); 
        Toast.makeText(mContext, "SOB : " + clickedItem, Toast.LENGTH_SHORT).show(); 
        ((SobItemsAdapter)parent.getAdapter()).setNextFilter(clickedItem); 
        ((SobItemsAdapter) parent.getAdapter()).notifyDataSetChanged(); 
       } 
      }); 
     } 
     else { 
      Toast.makeText(mContext, "Listelenecek Veri Yok", Toast.LENGTH_SHORT).show(); 
     } 
    } 

} 

И мой SobItemsAdapter.java

public class SobItemsAdapter extends BaseAdapter { 
    public enum STEPS{ SOB, STREET, CONNECTIONARTICLE, INSTALLATION } 
    Activity mActivity; 
    List<OsbDownloadItem> osbDownloadItemList; 
    List<String> visualRows = new ArrayList<String>(); 
    HashMap<String, List<OsbDownloadItem>> map; 
    STEPS filterStep; 
    public SobItemsAdapter(Activity activity){ 
     mActivity = activity; 
     filterStep = STEPS.SOB; 
     osbDownloadItemList = SharedData.osbDownloadItemList; 
     setNextFilter(""); 
    } 
    private void modifyVisualRows(HashMap<String, List<OsbDownloadItem>> _map){ 
     visualRows.clear(); 
     for(String item : _map.keySet()){ 
      visualRows.add(item); 
     } 
    } 
    @Override 
    public int getCount() { 
     return visualRows.size(); 
    } 
    @Override 
    public String getItem(int position) { 
     return visualRows.get(position); 
    } 
    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = mActivity.getLayoutInflater(); 
     View view = inflater.inflate(R.layout.activity_osb_items_row, parent, false); 
     if(null != view){ 
      ((TextView)view.findViewById(R.id.osb_items_sob)).setText(visualRows.get(position)); 
     } 
     return view; 
    } 
    public void setNextFilter(String value){ 
     switch (filterStep){ 
      case SOB: 
       map = DataFilter.getSobs(osbDownloadItemList); 
       filterStep = STEPS.STREET; 
       break; 
      case STREET: 
       map = DataFilter.getStreetsBySob(map.get(value)); 
       filterStep = STEPS.CONNECTIONARTICLE; 
       break; 
      case CONNECTIONARTICLE: 
       map = DataFilter.getConnectionArticlesByStreet(map.get(value)); 
       filterStep = STEPS.INSTALLATION; 
       break; 
      case INSTALLATION: 
       map = DataFilter.getInstalliationsByConnectionArticle(map.get(value)); 
       break; 
     } 
     modifyVisualRows(map); 
    } 
} 

ответ

0

Поместите это ниже код в вашей деятельности

@Override 
    public void onBackPressed() 
    { 
    if(checkBackPress) 
    { 
    checkBackPress =false; 
    sobItemsAdapter.setNextFilter(STEPS.SOB); 
    sobItemsAdapter.notifyDataSetChanged(); 
    } 
    super.onBackPressed(); 
} 

Создать одно логическое поле общественное логическое checkBackPress = ложь; в вашей деятельности. Установите этот checkBackPress как true, как только элемент щелкнул по событию щелчка элемента (checkBackPress = true) и установите checkBackPress как false в обратном порядке

+0

для чего? Я не мог понять, извините. –

+0

Вы пробовали этот код? – dindinii

+0

Конечно, я проверил код, и я попробовал, но я не мог назвать «родителем». –