2017-06-09 4 views
0

EmptyStackExceptionMyAdapter.java(以下を参照)になっても、スタックは空ではなくなります。ベースアダプタ - 空のスタック例外?

すべてをチェックしてすべてをダブルチェックしても、わかりません。どんな助けでも大変感謝しています。

MainActivity.java

package test.testapp; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.ListView; 

import java.util.ArrayList; 
import java.util.Stack; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ListView lv = (ListView)findViewById(R.id.list); 
     ArrayList<Stack<String>> list = new ArrayList<>(); 

     Stack one = new Stack(); 
     one.push("a"); 
     one.push("b"); 
     list.add(one); 

     Stack two = new Stack(); 
     two.push("c"); 
     two.push("d"); 
     list.add(two); 

     lv.setAdapter(new MyAdapter(this,list)); 
    } 
} 

MyAdapter.java

package test.testapp; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.Stack; 

public class MyAdapter extends BaseAdapter { 

    private Context context; 
    private ArrayList<Stack<String>> list; 

    public MyAdapter(Context context, ArrayList<Stack<String>> list){ 
     this.context = context; 
     this.list = list; 
    } 

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

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

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     Stack<String> stack = (Stack) getItem(position); 
     LayoutInflater inflater = (LayoutInflater) 
      context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     LinearLayout row = (LinearLayout) inflater.inflate(R.layout.row,parent,false); 

     ((TextView)row.findViewById(R.id.tv1)).setText(stack.pop()); // <--- Empty stack exception here 
     ((TextView)row.findViewById(R.id.tv1)).setText(stack.pop()); 

     return row; 
    } 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="test.testapp.MainActivity"> 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"></ListView> 

</LinearLayout> 

あなたは一度だけスタックをポップしていないrow.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:paddingTop="20dp" 
       android:paddingBottom="20dp" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:gravity="center_horizontal"> 

    <TextView 
     android:id="@+id/tv1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Text 1"/> 

    <TextView 
     android:id="@+id/tv2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Text 2"/> 

</LinearLayout> 
+0

それは奇妙なデザインです...なぜそこにスタックを入れたいですか? –

+0

完全なlogcatを表示してください –

+0

リストの各項目は多くのサブ項目を持っていますので、項目ごとのデータをグループ化する方法です。私はおそらく後で地図に変更するでしょう。 – sudoman

答えて

0

すべての単一の行アイテムはスタックをポップして、次の2つのアイテムを持っているかもしれないがgetViewはリストのリストを使用してみてください以上の二回

と呼ばれている場合、私は驚かない、またはMap<String, List<String>>場合あなたはExpandableListViewを探しています

+0

リストのリストが機能します。なぜスタックがなぜそうでないのか不思議... – sudoman

+0

"すべての単一の行アイテムがスタックをポッピングしています" - 真ですが、各行はその行のスタックをポップしています。私たちが欲しいものは何ですか。 – sudoman

+0

いいえ、その行だけの項目がポップしていません。 Lookup "listview recycling" –

関連する問題