2017-09-16 12 views
0

を読まれることはありませんこれは私のナビゲーション引き出しがどのように見えるかですただし、[ホーム]をクリックすると、onItemClickに返される位置は1になり、ハウスキーピングアクティビティが開きます。ハウスキーピングをクリックすると同じことが起こり、ランドリーが開きます。だから、ここでクリックした位置+ 1AndroidのナビゲーションドロワーonItemClick位置0は

を=として、それは位置を返します(ナビゲーションドロワーを使用する他のactivitesによって拡張された)私のBaseActivityのコード

public class BaseActivity extends AppCompatActivity { 

    protected FrameLayout frameLayout; 
    protected ListView mDrawerList; 
    protected String[] navItemsTitles = {"Home","Housekeeping","Laundry","Food","Reservations","Concierge","Hotel Info"}; 
    protected ArrayList<Items> navItemsArray; 
    protected static int position; 
    private DrawerLayout mDrawerLayout; 
    private static boolean isLaunched = true; 
    private ActionBarDrawerToggle actionBarDrawerToggle; 

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

     frameLayout = (FrameLayout) findViewById(R.id.content_frame); 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerList = (ListView) findViewById(R.id.left_drawer); 

     navItemsArray = new ArrayList<Items>(); 

     Log.i("NAV", "---- navItemsTitles: " + Arrays.toString(navItemsTitles)); 

     navItemsArray.add(new Items("Home", R.drawable.home_icon)); 
     navItemsArray.add(new Items("Housekeeping", R.drawable.housekeeping_icon)); 
     navItemsArray.add(new Items("Laundry", R.drawable.laundry_icon)); 
     navItemsArray.add(new Items("Food", R.drawable.food_icon)); 
     navItemsArray.add(new Items("Reservations", R.drawable.reservation_icon)); 
     navItemsArray.add(new Items("Concierge", R.drawable.concierge_icon)); 
     navItemsArray.add(new Items("Hotel Info", R.drawable.info_icon)); 

     //Adding header on list view 
     View header = (View) getLayoutInflater().inflate(R.layout.list_view_header_layout, null); 
     mDrawerList.addHeaderView(header); 

     // Set the adapter for the list view 
     mDrawerList.setAdapter(new NavigationDrawerListAdapter(this, navItemsArray)); 

     //Set the list's on-item click listener 
     mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
       Log.i("NAV", "---------- onItemClick position: " + position); 
       openActivity(position); 
      } 
     }); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeAsUpIndicator(R.mipmap.ic_launcher_round); 
     getSupportActionBar().setHomeButtonEnabled(true); 

     actionBarDrawerToggle = new ActionBarDrawerToggle(
       this, 
       mDrawerLayout, 
       R.string.open_drawer, 
       R.string.close_drawer 
     ) { 
      @Override 
      public void onDrawerClosed(View drawerView) { 
       Log.i("NAV", "---- onDrawerClosed position: " + position); 
       getSupportActionBar().setTitle(navItemsTitles[position]); 
       invalidateOptionsMenu(); 
       super.onDrawerClosed(drawerView); 
      } 

      @Override 
      public void onDrawerOpened(View drawerView) { 
       getSupportActionBar().setTitle(getString(R.string.app_name)); 
       invalidateOptionsMenu(); 
       super.onDrawerOpened(drawerView); 
      } 

      @Override 
      public void onDrawerSlide(View drawerView, float slideOffset) { 
       super.onDrawerSlide(drawerView, slideOffset); 
      } 

      @Override 
      public void onDrawerStateChanged(int newState) { 
       super.onDrawerStateChanged(newState); 
      } 
     }; 

     mDrawerLayout.addDrawerListener(actionBarDrawerToggle); 


    } 

    protected void openActivity(int position) { 
     mDrawerLayout.closeDrawer(mDrawerList); 

     BaseActivity.position = position; 

     Log.i("NAV", "------ Selected Item Position::"+position); 

     switch (position) { 
      case 0: 
       startActivity(new Intent(BaseActivity.this, HomeActivity.class)); 
       break; 
      case 1: 
       startActivity(new Intent(BaseActivity.this, HousekeepingActivity.class)); 
       break; 
      case 2: 
       startActivity(new Intent(BaseActivity.this, LaundryActivity.class)); 
       break; 
      case 3: 
       startActivity(new Intent(BaseActivity.this, FoodActivity.class)); 
       break; 
      case 4: 
       startActivity(new Intent(BaseActivity.this, ReservationsActivity.class)); 
       break; 
      case 5: 
       startActivity(new Intent(BaseActivity.this, ConciergeActivity.class)); 
       break; 
      case 6: 
       startActivity(new Intent(BaseActivity.this, HotelInfoActivity.class)); 
       break; 
      default: 
       break; 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     //code 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem menuItem) { 
     //code 
    } 

    @Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     //code 
    } 

    @Override 
    public void onBackPressed() { 
     //code 
    } 
} 

これはLogcatからの情報であります:ここでは

I: ---- navItemsTitles: [Home, Housekeeping, Laundry, Food, Reservations, Concierge, Hotel Info] 
I: ---------- onItemClick position: 1 
I: ------ Selected Item Position::1 
I: ---- navItemsTitles: [Home, Housekeeping, Laundry, Food, Reservations, Concierge, Hotel Info] 

は私のNavigationDrawerListAdapter

public class NavigationDrawerListAdapter extends BaseAdapter { 

    private Context context; 
    private ArrayList<Items> itemsArray; 

    public NavigationDrawerListAdapter(Context context, ArrayList<Items> itemsArray) { 
     this.context = context; 
     this.itemsArray = itemsArray; 
    } 

    private class ViewHolder { 
     TextView itemName; 
     ImageView itemIcon; 
    } 

    @Override 
    public int getCount() { 
     return itemsArray.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return itemsArray.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 

     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     if(convertView == null) { 
      convertView = inflater.inflate(R.layout.drawer_list_item, null); 
      holder = new ViewHolder(); 

      holder.itemName = (TextView) convertView.findViewById(R.id.item_name_txtview); 
      holder.itemIcon = (ImageView) convertView.findViewById(R.id.item_icon_imgview); 

      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     Items item = (Items) getItem(position); 
     holder.itemName.setText(item.getItemName()); 
     holder.itemIcon.setBackgroundResource((int)item.getIconId()); 

     return convertView; 
    } 
} 

Wであります私は間違っているのですか?すべての項目は指定された通りに来るので、全員が適切な位置にありますが、1番目の項目(位置0)をクリックすると、位置== 1が返されます。

答えて

1

そのとき、ヘッダーは0番目の位置です。あなたのホームメニューは1位にしか戻りません。

ので、あなたがこの

switch (position) { 
      case 1: 
       startActivity(new Intent(BaseActivity.this, HomeActivity.class)); 
       break; 
      case 2: 
       startActivity(new Intent(BaseActivity.this, HousekeepingActivity.class)); 
       break; 
      case 3: 
       startActivity(new Intent(BaseActivity.this, LaundryActivity.class)); 
       break; 
      case 4: 
       startActivity(new Intent(BaseActivity.this, FoodActivity.class)); 
       break; 
      case 5: 
       startActivity(new Intent(BaseActivity.this, ReservationsActivity.class)); 
       break; 
      case 6: 
       startActivity(new Intent(BaseActivity.this, ConciergeActivity.class)); 
       break; 
      case 7: 
       startActivity(new Intent(BaseActivity.this, HotelInfoActivity.class)); 
       break; 
      default: 
       break; 
     } 
+0

のこの行に試してみるように変更する必要があります - 丸いアイコンと名前で位置0と見なされますか? – codeinprogress

+0

はい、ユーザーアイコンと名前は位置0、ホームアイコンは1番目の位置 – Raja

+0

ですが、そのヘッダービューはなぜリスト項目の1つとしてカウントされますか?私は明示的にヘッダーとして追加しました。 – codeinprogress

1

@codeinprogressだから、あなたが一番上のヘッダと言うことを意味するコード

mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
       Log.i("NAV", "---------- onItemClick position: " + position); 
       **openActivity(position-1);** 
      } 
     }); 
+0

それはそのままで試してみてください –

+0

はい、動作します。下の@Rajaは、headerViewが0として数えられると説明しました。私の唯一の質問はなぜですか?ヘッダーとして定義されていませんか?だから、それは他のアイテムの一部としてカウントされますか? – codeinprogress

+0

それは正しく機能しましたか? –

関連する問題