ImageView未正确加载

时间:2015-03-02 20:51:51

标签: android image

在我的活动中,我有一个ImageView

XML代码:     

<!-- FOTO LATERAL! -->

                    <ImageView 
                        android:id="@+id/simbolo_raca"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"

                         />
                   <Button 
                        android:id="@+id/button_save"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Ok. Seguinte Pergunta"
                        android:layout_gravity="right"
                        android:gravity="right"
                        android:paddingRight="30dip">
            </LinearLayout>

这是活动:

public class QuestionarioActivityRaca extends Activity{
 ImageView simbolo;
int position;
Button B_Save;
List<Drawable> List_imagens = new ArrayList<Drawable>();
@Override
public void onCreate(Bundle savedInstanceState) {
simbolo = (ImageView) findViewById(R.id.simbolo_raca);
B_Save = (Button) findViewById(R.id.button_save);
position = 0;
List_imagens.add(getResources().getDrawable(R.drawable.p1));
List_imagens.add(getResources().getDrawable(R.drawable.p2));
List_imagens.add(getResources().getDrawable(R.drawable.p3));
List_imagens.add(getResources().getDrawable(R.drawable.p4));
loadNewImage(position);
B_Save.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
         loadNewImage(position);
         position++;
        }
    });
 }
// I Use this method to load the Image
public loadNewImage(int Page)
{    
 new Thread(new Runnable(){
            @Override
            public void run(){
              simbolo.post(new Runnable(){
                    @Override
                    public void run()
                    {
                        simbolo.setImageDrawable(List_imagens.get(Page));
                    }
                });
            }
        }).start();
 }

第一次调用此方法时,(position = 0)图像不会加载。之后,图像正确加载。

第一次如何加载图片?

(我无法使用android:src="@drawable/x"在XML中加载图像),因为图像可能随时都不同。 EDITED!

2 个答案:

答案 0 :(得分:1)

您发布的代码示例存在许多问题。

喜欢用大写I来写int。

Int position;  

不使用onClick中的方法发送参数:

    public void onClick(View v) {
     loadNewImage();
    }

在XML和代码中还有几个。

每次执行此任务时是否有特定原因要运行新线程? 如果你真的需要一个线程,你必须在方法中将int声明为final。

但是,您应该使用下面的代码示例获得所需的结果。 你必须修改你的onClick,为你想要使用的任何drawable发送适当的int。

祝你好运。

public class testactivity extends ActionBarActivity {

    ImageView simbolo;
    int position;
    Button B_Save;
    List<Drawable> List_imagens = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_testactivity);
        simbolo = (ImageView) findViewById(R.id.simbolo_raca);
        B_Save = (Button) findViewById(R.id.button_save);
        position = 0;
        List_imagens.add(getResources().getDrawable(R.drawable.ic_drawer));
        List_imagens.add(getResources().getDrawable(R.drawable.ic_check));
        List_imagens.add(getResources().getDrawable(R.drawable.ic_action_add_package));
        List_imagens.add(getResources().getDrawable(R.drawable.ic_action_exception));
        loadNewImage(position);
        final Random rand = new Random();
        B_Save.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                loadNewImage(rand.nextInt(4));
            }
        });
    }

    public void loadNewImage(final int page)
    {
        simbolo.setImageDrawable(List_imagens.get(page));
    }
}

答案 1 :(得分:1)

首先点击按钮之前你调用这个函数来加载loadNewImage(position);的初始图像,当点击按钮时你调用这个函数loadNewImage();我猜它点击按钮时有效因为这个loadNewImage();方法没问题且loadNewImage(int page);不正常,因为它们是两个不同的函数。

如果您希望整数对象使用Integer position或者使用int position,请解决您的问题,请放开该主题。现在您的代码将正常工作