2014-02-12 34 views
2

我已經做了question(刪除),但我認爲這是非常困惑和難以理解,所以這個問題是關於同樣的問題,但比以前更簡單。刷新ArrayList到ClickListener

我做出了表率項目,同樣的情況,有以下項目:

  • 一個ArrayList,用我的所有項目。
  • 另一個帶有過濾項目的ArrayList。
  • A設置爲過濾項目。

對於我的Set上的每個過濾項目,我在主視圖上添加一個新視圖。這些新的視圖,有一個OnClickListener,理論上顯示過濾所有項目。

問題是當我點擊任何視圖時,結果都是一樣的。

我的代碼:這兩個按鈕的

public class MainActivity extends Activity { 

    private List<Integer> myList = new ArrayList<Integer>(); 
    private List<Integer> myFinalList; 
    private Set<Integer> setOfAallCodes = new HashSet<Integer>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     myList.add(1); 
     myList.add(1); 
     myList.add(1); 
     myList.add(2); 
     myList.add(2); 
     myList.add(2); 

     listItems(); 
    } 

    public void listItems() { 
     myFinalList = new ArrayList<Integer>(); 
     for (Integer element : myList) { 
      setOfAallCodes.add(element); 
     } 
     Object[] arrayOfAllCodes; 
     arrayOfAllCodes = setOfAallCodes.toArray(); 
     for (Object i : arrayOfAllCodes) { 
      myFinalList.clear(); 
      int actual = (Integer) i; 
      for (Integer element : myList) { 
       if (element == actual) { 
        myFinalList.add(element); 
       } 
      } 
      LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(
        Context.LAYOUT_INFLATER_SERVICE); 
      View v = vi.inflate(R.layout.button_view, null); 
      Button btnTest = (Button) v.findViewById(R.id.mega_button); 
      View insertPoint = findViewById(R.id.conteudo); 
      ((ViewGroup) insertPoint).addView(v); 
      btnTest.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        System.out.println("Result: " + myFinalList); 
       } 
      }); 
     } 
    } 
} 

結果是:[2, 2, 2]

有什麼不對?我能做些什麼來使按鈕顯示他們的結果?

+0

能否請刪除您的其他問題,以避免重複?先謝謝你 ! – 2Dee

+0

這有很多問題,我不知道從哪裏開始......首先確定:結果是一樣的,因爲你總是打印相同的結果......你期望得到什麼結果? – Fildor

回答

1

我會試一試。這將不足以解決所有問題:

  1. 您將需要一個「myFinalList」每個視圖,而不是一個全局的。現在,所有按鈕都會打印列表中同一個實例的內容。

  2. 請詳細說明您的「過濾器」應該如何工作。您是否期望以下輸出?

查看1 = [1,1,1], 查看2 = [2,2,2]

+0

是的,它是我想要的輸出。 – Rafael

0

我做到了!我不得不在ClickListener中做一些操作。

我的最終代碼:

public class MainActivity extends Activity { 

private List<Integer> myList = new ArrayList<Integer>(); 
private Set<Integer> setOfAallCodes = new HashSet<Integer>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    myList.add(1); 
    myList.add(1); 
    myList.add(1); 
    myList.add(2); 
    myList.add(2); 
    myList.add(2); 
    listItems(); 
} 

public void listItems() { 
    for (Integer element : myList) { 
     setOfAallCodes.add(element); 
    } 
    Object[] arrayOfAllCodes; 
    arrayOfAllCodes = setOfAallCodes.toArray(); 

    for (Object i : arrayOfAllCodes) { 
     LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(
       Context.LAYOUT_INFLATER_SERVICE); 
     View v = vi.inflate(R.layout.button_view, null); 
     Button btnTest = (Button) v.findViewById(R.id.mega_button); 
     View insertPoint = findViewById(R.id.conteudo); 
     ((ViewGroup) insertPoint).addView(v); 
     final int atual = (Integer) i; 
     btnTest.setOnClickListener(new OnClickListener() { 
      List<Integer> myFinalList = new ArrayList<Integer>(); 
      @Override 
      public void onClick(View v) { 
       for (Integer integer : myList) { 
        if (atual == integer) { 
         myFinalList.add(integer); 
        } 
       } 
       System.out.println(myFinalList); 
       myFinalList.clear(); 
      }  
     }); 
    } 
} 

}