2016-07-13 23 views
0

私はヘッダーを持つListViewを持っています。そのヘッダーは私のListViewでposition == 0を取ることを知っています。Android ListView-Headerが最初の位置(位置(0))になります

私の配列には3つの文字列があります。ヘッダーが最初の位置を取る場合。私の配列は2つ残っています。

if (array[position] == array[0]) { 
    Toast.makeText(UserAreaActivity.this, "You've selected the first Array-String, Toast.LENGTH_SHORT).show(); 

が、私はこれを記述する必要があり:通常

次のように記述し、私がクリックしたときにヘッダーが、私は私のアプリで強制閉じるを取得し、第一の位置がかかるため、

if (array[position] == array[1]) { 
    Toast.makeText(UserAreaActivity.this, "You've selected the first Array-String, Toast.LENGTH_SHORT).show(); 

しかし、 3番目のエントリに。

私の質問に対する1つの答えごとに感謝します。

これは私が取得エラーがこれです全体のクリックリスナー

private void addDrawerItems() { 
    final String[] array = { "Earn Coins", "Get Likes", "Logout"}; 
    mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array); 

    View header = getLayoutInflater().inflate(R.layout.header, null, false); 
    mDrawerList.addHeaderView(header, "null", false); 
    mDrawerList.setAdapter(mAdapter); 

    mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      if(array[position]==array[1]){ 
       Toast.makeText(UserAreaActivity.this, "You've selected Earn Coins!", Toast.LENGTH_SHORT).show(); 
       Intent intent = new Intent(UserAreaActivity.this, UserAreaActivity.class); 
       UserAreaActivity.this.startActivity(intent); 
      }else if(array[position]==array[2]){ 
       Toast.makeText(UserAreaActivity.this, "You've selected Get Likes!", Toast.LENGTH_SHORT).show(); 
       Intent intent = new Intent(UserAreaActivity.this, GetLikesActivity.class); 
       UserAreaActivity.this.startActivity(intent); 
      }else if(array[position]==array[3]){ 
       Toast.makeText(UserAreaActivity.this, "You've selected Logout!", Toast.LENGTH_SHORT).show(); 
       Intent intent = new Intent(UserAreaActivity.this,LoginActivity.class); 
       UserAreaActivity.this.startActivity(intent); 
      }else{ 
       Toast.makeText(UserAreaActivity.this,"Whatever..",Toast.LENGTH_SHORT).show(); 
      } 

     } 
    }); 
} 

です:

java.lang.ArrayIndexOutOfBoundsException: length=3; index=3 
    at de.enesak.likelounge.UserAreaActivity$1.onItemClick(UserAreaActivity.java:59) 
    at android.widget.AdapterView.performItemClick(AdapterView.java:299) 
    at android.widget.AbsListView.performItemClick(AbsListView.java:1113) 
    at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904) 
    at android.widget.AbsListView$3.run(AbsListView.java:3638) 
    at android.os.Handler.handleCallback(Handler.java:733) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5017) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
    at dalvik.system.NativeStart.main(Native Method) 

答えて

0

基本的に、あなたはあなたのarray

ListView位置/な長さを混合しています失敗

ご質問いただいたとおり、ListViewにヘッダーがあります。ヘッダー

  • [1] - - アイテム1
  • [2] - アイテム2
  • [3] - ITEM3
    • [0]:その後、おそらく、あなたのリストビューには、次のポジションを持っています

      ただし、変数arrayはおそらくアイテムのみで作成されています。だから、あなたの配列は次のようである:

      • [0] - アイテム1
      • [1] - アイテム2
      • [2] - ITEM3

      この方法で、もし(配列[位置] = = array [3])行は、arrayに要素[3]がないため、ArrayIndexOutOfBoundsExceptionを生成します。

      • lenght == 4arrayを作成し、[0]の位置を無視する:あなたが好きな、さまざまな方法であなたのコードを修正することができます

        修正

        これは良くありません。配列はListViewの位置と一致します。ただし、不要なメモリが使用されています。/他

      ちょうど常にarray(0から3までではなく)0から2に行くことを考慮すれば

    • はあなたを変更

      。 ListViewのような4つの要素はありません。あなたの問題

      については

      if(array[position]==array[0]){ 
          // code 
      } else if(array[position]==array[1]){ 
          // code 
      } if(array[position]==array[2]){ 
          // code 
      } else { 
          // code 
      } 
      

      正しい解決策は、あなただけのユーザーがクリックした位置に相談し、必要な行動を取る必要があります...あなたの配列と比較する必要はありません。したがって、以下のようにコードを更新してください:

      mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
          @Override 
          public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      
            switch (position) { 
            case 1: { 
             Toast.makeText(UserAreaActivity.this, "You've selected Earn Coins!", Toast.LENGTH_SHORT).show(); 
             Intent intent = new Intent(UserAreaActivity.this, UserAreaActivity.class); 
             UserAreaActivity.this.startActivity(intent); 
             break; 
            } 
            case 2: { 
             Toast.makeText(UserAreaActivity.this, "You've selected Get Likes!", Toast.LENGTH_SHORT).show(); 
             Intent intent = new Intent(UserAreaActivity.this, GetLikesActivity.class); 
             UserAreaActivity.this.startActivity(intent); 
             break; 
            } 
            case 3: { 
             Toast.makeText(UserAreaActivity.this, "You've selected Logout!", Toast.LENGTH_SHORT).show(); 
             Intent intent = new Intent(UserAreaActivity.this,LoginActivity.class); 
             UserAreaActivity.this.startActivity(intent); 
             break; 
            } 
            default: 
             // Header 
             Toast.makeText(UserAreaActivity.this,"Whatever..",Toast.LENGTH_SHORT).show(); 
             break; 
           } 
          } 
      }); 
      
    +0

    Hey!ご回答有難うございます。あなたのコードを使用することで、私はもうエラーは表示されませんが、今度はどのアイテムをクリックしても問題は起こりません。 – Ketarr

    +0

    申し訳ありません。私は休憩を挿入するのを忘れました...私は答えを更新しました – W0rmH0le

    +0

    パーフェクト!ブレークラインでそれは動作します。どうもありがとうございます。あなたは、あなたの方法がなぜ機能し、なぜ私のことを教えてくれませんか?私のために本当に役立つだろう。 – Ketarr

    関連する問題