2016-04-23 15 views
0

リストビューで選択可能な配列内のアイテムのインデックスを取得しようとしています。唯一の問題は、アイテムをクリックすると、-1のインデックスだけが返されるということです。つまり、実際に一致するはずです。ありがとうございました!一致がある場合にのみインデックスを返します

package com.goldleaf.branden.goldleafcomics; 

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.ListFragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.kosalgeek.android.json.JsonConverter; 
import com.kosalgeek.genasync12.*; 

import java.io.FileInputStream; 
import java.lang.reflect.Array; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

public class GlimpseListFragment extends ListFragment { 
    List<String> glimpse = new ArrayList<String>(); 
    List<String> titles = new ArrayList<String>(); 
    List<UniverseListing> universalListings = new ArrayList<UniverseListing>(); 

    public GlimpseListFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     ViewGroup rootView = (ViewGroup)inflater.inflate(R.layout.fragment_glimpse_list, container, false); 

     return rootView; 
    } 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     String url = "http://goldleafcomics.com/application/UniverseGlimpse.JSON"; 
     PostResponseAsyncTask task = new PostResponseAsyncTask(getActivity(), new AsyncResponse() { 
      @Override 
      public void processFinish(String s) { 
       universalListings = new JsonConverter<UniverseListing>().toArrayList(s, UniverseListing.class); 
       Toast.makeText(getActivity(), "Application Data Refreshed", Toast.LENGTH_LONG).show(); 

       ArrayList<String> glimpse = new ArrayList<String>(); 
       for(UniverseListing value: universalListings){ 
        glimpse.add(value.universeGlimpse); 
       } 

       ArrayList<String> titles = new ArrayList<String>(); 
       for(UniverseListing value: universalListings){ 
        titles.add(value.universeId); 
       } 

       ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, titles); 
       setListAdapter(adapter); 


      } 
     }); 
     task.execute(url); 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 
     String value = (String)getListAdapter().getItem(position); 

     int index = this.titles.indexOf(value); 
     String value2 = Integer.toString(index); 

     Toast.makeText(getActivity(), value2, Toast.LENGTH_LONG).show(); 
    } 
} 
+0

アダプタを使用する代わりに 'titles.get(position)'の何が問題になっていますか? –

+0

それは何も返しません、java.lang.IndexOutOfBoundsException:無効なインデックス0、サイズは0です –

+0

それは完全に-1を得る理由を完全に説明します。リストが空です... –

答えて

0

あなたは、一見2回を定義するこれらの変更を行うために試みることができる、

List<String> glimpse; 

とのonCreate内

glimpse = new ArrayList<>(); 

にそれを初期化し、タイトルのために同じことを行いますユニバーサルリスト

+0

これは本当にありがとうございました! –

+0

@ cricket_007がコメントで述べているように、変数のシャドーイングについて読む必要があります。[this](http://stackoverflow.com/questions/1092099/what-is-variable-shadowing-used-for-in-a-java -class)スレッドは非常に役に立ちます。 –

0

これらの2つのコードセクションを使用してください。 shadowingと同じ名前のローカル変数を持つメンバ変数です。

public class GlimpseListFragment extends ListFragment { 
    List<String> glimpse; 
    List<String> titles; 
    List<UniverseListing> universalListings; 

その後...

  glimpse = new ArrayList<String>(); 
      for(UniverseListing value: universalListings){ 
       glimpse.add(value.universeGlimpse); 
      } 

      titles = new ArrayList<String>(); 
      for(UniverseListing value: universalListings){ 
       titles.add(value.universeId); 
      } 

あなたはクラスでのArrayListを初期化する必要はありません。あなたは通常遅れて初期化すべきです(言い換えれば、必要なとき)

関連する問題