如何获取在异步任务onPostExecute中以编程方式创建的按钮ID

时间:2014-02-20 07:49:38

标签: android android-asynctask

我在onPostExecute中创建了这样的适配器,并且我以编程方式设置了按钮的ID。

list.add(new adapters.GunADP("name","name","name",buttonId));
 //i set button id 5000

当我尝试在onPostExecute方法结束时使用getId时,android无法找到该ID。我也无法从onCreate获取该ID,因为当app启动时,buttun不存在。 我创建hackButton试图从hackButton的onClickListener获取id,id返回成功,因为onpostexecute方法已经完成,现在id存在,但我不想这样使用。

btn_devam = (Button) findViewById(R.id.button_ileri);
        btn_devam.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                Button x = (Button) findViewById(5000);
        x.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {


            Toast.makeText(this, "tag "+v.getTag()+"id "+v.getId(), Toast.LENGTH_SHORT).show();
            }
        });
            }
        });

那么我怎样才能获得按钮的id,这是我在onPostExecute完成后以编程方式创建的?

我想使用此代码;

    Button x = (Button) findViewById(5000);

我不能在oncreate中使用它,也不能在onpostexecute结束时使用它。那么如何在创建之后获得特定的id。

2 个答案:

答案 0 :(得分:0)

我认为您缺少包含该按钮的视图的引用。

yourView.findViewById("Id to search");

yourview是您的按钮的父视图的引用,即函数参数中的 V

答案 1 :(得分:0)

我已经解决了!

我在创建

中创建了这样的线程
private Thread mMainThread;

mMainThread = new Thread(){

            @Override
            public void run(){
                try{
                    synchronized (this) {
                        wait(2000);
                                    try{
        Button x = (Button) findViewById(5000);

        x.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                Toast.makeText(BiletSecim.this, "tag "+v.getTag()+" id "+v.getId(), Toast.LENGTH_SHORT).show();
            }
        });
        }catch(Exception e){

        }
                    }
                }catch (Exception e) {
                }
                }};

然后在onpostexecute方法结束时,我启动线程

mMainThread.start();

2000毫秒对我来说没问题。