单击后返回ListView为空

时间:2014-01-24 14:16:36

标签: android listview android-listview onclicklistener

我的布局包含ListViewImageView。最初,ImageView是不可见的。我有一个列表,当单击一个项目时,它通过设置ImageView并使其可见而且listView不可见来显示该项目的图像,到目前为止一切正常。从那里,onBackPressed()我想再次看到我的列表视图,我重写onBackPressed(),使我的图片视图不可见,列表视图可见。但是,当我选择一个项目并看到它的图像然后按回来时,会出现一个空白活动,而不是我的listView。我不想再打电话给活动,我该怎么办? listView有什么问题?我尝试拨打invalidate()invalidateViews(),再次设置适配器,但他们并不担心。

其实我在活动的onResume上填写适配器,这里是代码:

public class MyViewActivity extends Activity{

    ListView imageList;
    CustomImageListAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_list_view);

        //initialization of image array list etc
    }


    @Override
    public void onResume(){
        super.onResume();
        imageList = (ListView) findViewById(R.id.listView);

        adapter = new CustomImageListAdapter(this,R.layout.image_item, imageNames);
        imageList.setAdapter(adapter);
        imageList.setOnItemClickListener(new OnItemClickListener()
        {
            public void onItemClick(AdapterView<?> adapter, View view, int i,
                    long l) {
                // TODO Auto-generated method stub
                if(imageNames.get(i) != null) {
                    onImageSelected(i);
                }
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.image_list_view, menu);
        return true;
    }
    public void onImageSelected(int position) {
        ...
    }

    @Override
    public void onBackPressed() {

        if (img.getVisibility() == ImageView.VISIBLE){
//          img.setVisibility(ImageView.INVISIBLE);
//          imageList.invalidateViews();
//          imageList.setVisibility(ListView.VISIBLE);

// Here actually I want to use the upper part that I commented, but it didn't work, I have to call the same activity again to see my listview

            Intent i = new Intent(MyViewActivity.this, MyViewActivity.class);
            startActivity(i);
            finish();
        }
        else {
            ....
        }

        return;
    }

    private class CustomImageListAdapter extends ArrayAdapter<String>{
        ...
}

2 个答案:

答案 0 :(得分:0)

 Intent i = new Intent(MyViewActivity.this, MyViewActivity.class);
 i.putExtra("currentObjectID",objectID);
 startActivity(i);
 finish();

你为什么要在同一个活动中穿越?你应该理解意图的使用,如果你想保持同一个活动,只需为currentObjectID设置一个标志,而不是放置额外的..

答案 1 :(得分:0)

只要我能猜到,问题就是由

引起的
img.setVisibility(ImageView.INVISIBLE);

您可以尝试使用View.GONE

差异在android api的doc中明确说明,我引用了:

/**
 * This view is invisible, but it still takes up space for layout purposes.
 */
public static final int INVISIBLE = 0x00000004;

/**
 * This view is invisible, and it doesn't take any space for layout
 */
public static final int GONE = 0x00000008;

顺便说一下,我会建议使用片段来完成你的工作。具体地,片段A用于呈现列表视图,并且当单击项目时,切换到包含内容的片段B.按下Back时,只需让后台工作就可以了。