使用onclicklistener时的内部类问题

时间:2014-11-27 20:11:00

标签: android inner-classes

我一直在重复问题:从内部类中访问变量 每次我想使用来自onclicklistener等的对象等。

我知道问题是它没有设置为final,但是如果我设置为final,那么在按下onclicklistener按钮之前我无法做任何事情......

示例我有一个EditText字段,它填充了来自对象的getText,然后我想按下一个应用按钮和带有文本字段中新文本的对象。

当对象需要为“内部类”使用它时,这不起作用。

我如何最好地处理这个?我一直在遇到这个血腥的现象...

public class EditPicture extends Activity{

private EditText text;
private Button applyBtn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    UUID itemID = (UUID)getIntent().getSerializableExtra("itemUUID");
    PictureItem pi = new PictureItem("","");

    final ArrayList<PictureItem> tempArray = PictureTalkFragment.array;
    for(int i = 0; i < tempArray.size(); i++){
        if(itemID.equals(tempArray.get(i).getId())){
            pi = tempArray.get(i);
            tempArray.remove(i);
        }
    }

    setContentView(R.layout.picturetalk_edit_pic);
    text = (EditText)findViewById(R.id.editName);
    text.setText(pi.getTitle());
    applyBtn = (Button)findViewById(R.id.applyChangeBtn);
    applyBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            tempArray.add(pi);
        }
    });


}

}

2 个答案:

答案 0 :(得分:1)

您应该在tempArray方法之外定义onCreate变量。

public class EditPicture extends Activity{

private EditText text;
private Button applyBtn;

ArrayList<PictureItem> tempArray

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    UUID itemID = (UUID)getIntent().getSerializableExtra("itemUUID");
    PictureItem pi = new PictureItem("","");

    tempArray = PictureTalkFragment.array;

    for(int i = 0; i < tempArray.size(); i++){
        if(itemID.equals(tempArray.get(i).getId())){
            pi = tempArray.get(i);
            tempArray.remove(i);
        }
    }

    setContentView(R.layout.picturetalk_edit_pic);
    text = (EditText)findViewById(R.id.editName);
    text.setText(pi.getTitle());
    applyBtn = (Button)findViewById(R.id.applyChangeBtn);
    applyBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            tempArray.add(pi);
        }
    });


}
}

答案 1 :(得分:0)

问题是您将图片添加到临时数组中,单击该数组时无法访问该数组。我认为你可以做这样的事情来定义inCreate函数之外的数组。

public class EditPicture extends Activity{

private EditText text;
private Button applyBtn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    UUID itemID = (UUID)getIntent().getSerializableExtra("itemUUID");
    PictureItem pi = new PictureItem("","");

    final ArrayList<PictureItem> tempArray = PictureTalkFragment.array;
    for(int i = 0; i < tempArray.size(); i++){
        if(itemID.equals(tempArray.get(i).getId())){
            pi = tempArray.get(i);
            tempArray.remove(i);
        }
    }

    setContentView(R.layout.picturetalk_edit_pic);
    text = (EditText)findViewById(R.id.editName);
    text.setText(pi.getTitle());
    applyBtn = (Button)findViewById(R.id.applyChangeBtn);
    applyBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(PictureTalkFragment.array != null){
               PictureTalkFragment.array.add(pi);
            }
        }
    });


}
}