2016-06-06 6 views
0

나는 목록보기를 만들었고 항목을 클릭하면 필터가 걸려서 내가 클릭 한 항목으로 필터링 한 항목을 보여줍니다. 우리는 treeview와 같다고 생각할 수 있습니다. 제 질문은 마지막 항목 인 "이 목록보기에서 어떻게 한 걸음 뒤로 가야합니까?"입니다. 기기의 뒤로 버튼을 클릭하면 주 활동이 반환되지만이 목록보기로 돌아 오는 경우에만 되돌릴 수 있습니다.안드로이드리스트보기 뒤로 버튼

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 = 거짓 만들기 활동에 코드 아래에이를 넣어; 당신의 활동에. item click 이벤트 (checkBackPress = true)를 클릭하고 backpressressed에서 checkBackPress를 false로 설정하면이 checkBackPress를 true로 설정하십시오.

+0

어디서? 나는 미안하다는 것을 이해할 수 없었다. –

+0

이 코드를 사용해 보셨습니까? – dindinii

+0

물론 코드를 확인하고 시도했지만 "부모"라고 부를 수는 없습니다. –