2011-11-30 94 views
1

讓我先說我已經做了很多的研究在Android應用中創建動態按鈕,而且大多數是完全錯誤的或有活力有不同的看法,比我做的前言我的問題。如果我錯過了某些東西,那麼只需發佈鏈接,我會檢查出來。Android應用程序開發,動態按鈕和字段

我正在尋找的是創建基於我從互聯網來源收集信息,我的應用程序內的按鈕的方式。例如,當某人在我關心的論壇上創建帖子時,該應用會找到這個帖子,併爲我解析,並返回一些信息。由於我無法在顯示的每篇文章的屏幕上顯示所有這些信息,因此我想動態創建一個按鈕來預覽此信息。如用戶姓名,日期和簡短描述(通過點擊進行預覽,將在單獨的活動中提供所有信息)。爲了這篇文章,我們假設我從文本輸入位置(而不是從實際的內部論壇帖子)獲取此信息。

首先,我該如何動態創建按鈕?我的另一半問題對我來說並不重要。我想以編程方式做到這一點。教程鏈接很棒。

其次,不重要......有一次,我創造了這個按鈕動態,我怎樣才能根據預測的格式按鈕的自定義視圖。

如果有不清楚的地方,只是問,我會盡力澄清。感謝你的幫助!

+0

您能否澄清一下您對'動態創建'以及爲什麼要以編程方式執行所有操作的含義?基本上,在XML中創建基本佈局會出現什麼問題,然後只填寫您從互聯網上獲取的數據的字段? – gianpi

+0

這個想法是應用程序自己從網上抓取信息。就像我要發佈應用程序一樣,並且在論壇上有一個新帖子,該應用程序會抓取信息並在應用程序中創建一個新按鈕,而不會執行任何新的編碼。 – Nibirue

+0

好吧,那麼我想你想要一個按鈕列表?所有的按鈕都有相同的格式/字段,只是不同的內容? – gianpi

回答

0

我認爲這回答你的問題。這個想法是以編程方式創建一個按鈕,然後將其添加到當前佈局。 Somethiug like this:

Button newButton = new Button(this); 
newButton.setText("Click Me"); 
newButton.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
    ... 
} 
}); 
container.addView(newButton); 

其中容器是將保存該按鈕(即將成爲它的父母)的佈局。如果需要,您還可以將佈局設置添加到按鈕。

+0

我不確定這是我在找什麼,但不是肯定的,因爲我無法編譯它。所以我們可以說我將它添加到我的活動中。你把容器放在哪裏就是我想要按鈕存在的佈局的id名稱?即使我得到這個工作,它不會使它動態嗎?我認爲這應該是像「如果按鈕按下,創建新的按鈕與x,y,z ...參數」所有在應用程序內。唯一的靜態按鈕是創建新按鈕的按鈕。 – Nibirue

+0

那麼,只需在您按下的按鈕的onClick()方法中創建新按鈕即可。 – dhaag23

+0

如何在onClick()方法中創建不確定數量的按鈕? – Nibirue

0

好了,你可以創建一個新Button,並設置onClickListener像這樣:

Button button = new Button(context); 
    button.setText("New Button"); 
    button.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 

    } 
    }); 

如果你還有什麼需要設置,如一個ID,就可以調用該方法,如你所願。你需要把它添加到您的佈局像這樣:

LinearLayout layout = (LinearLayout)findViewById(R.id.linearLayout); 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
button.setLayoutParams(params);    
layout.addView(button); 

當然還有更多,你可以用它做什麼,但應該讓你開始,和其他任何你需要的,你應該能夠通過細讀找到文檔。

如果您需要什麼忙更具體,然後只是評論,我將試圖闡述。

+0

使用您的代碼並試圖更好地瞭解發生的事情後,看起來您的解決方案是正確的。然而,我的模擬器給了我一個錯誤消息,無法啓動應用程序。問題的一些來源可能是您創建新按鈕的位置。你有(上下文)而不是(本)。你在這裏意味着什麼? (上下文)出錯,所以我將其更改爲(this)。接下來,我將您的linearlayout代碼添加到onClick方法。它是否正確?我不確定我的問題存在於何處,因爲理論上它是有道理的。 – Nibirue

+0

我使用'context'而不是這個,因爲在我創建的每個類的Class體中,我有'Context context;'然後在我的每個類的'onCreate'中,我放了'context = this;'。這樣,每次我需要引用一個上下文時,我都可以沒有問題地這樣做。例如:如果你在'onClickListener'內,那麼使用'this'作爲上下文不起作用,所以我引用我的全局變量'context'。你可以自由使用'this'。我只是喜歡按照我所描述的來設置'context'變量。這很簡單。 – Jakar

+0

我會建議把佈局實例化行放在你的'onCreate'中。然後,您將從互聯網上檢索數據,並在使用'params','setLayoutParams'和'addView'行之後更新您的佈局,這會在屏幕上添加一個按鈕。在所述按鈕的「onClick」中,您可以將所需的任何代碼放置到「startActivity」中。另一個人回答推薦一個適配器。這可能對你更好,但我不知道,因爲我沒有經驗與他們。在我的應用程序中,上述方法令人滿意。 – Jakar

1

在我看來,正確的做法是有一個Adapter,將數據映射到一個特定的視圖(在你的情況下按鈕)。

你選擇什麼適配器將取決於你如何決定從互聯網獲取和存儲數據。

當有新帖子時,您將會將它們添加到數據源(數據庫,列表等)中,您將調用notifyDataSetChanged,它將刷新列表,根據需要動態創建視圖以顯示所有的數據。

+0

我很欣賞這一點,因爲儘管原來的問題需要先解決,但這很快就會引起關注。 – Nibirue