【问题标题】:"Your content must have a ListView whose id attribute is 'android.R.id.list'" When changing from ListActivity to a view“您的内容必须有一个 id 属性为 'android.R.id.list' 的 ListView”从 ListActivity 更改为视图时
【发布时间】:2018-01-30 02:30:40
【问题描述】:

我想编写一个应用程序,它将 a:使用 sdcard 中的图片文件填充列表视图,并且 b:从列表中选择一个选项时显示图像。

但是,它挂起并出现上述异常。我看不出来为什么……?请帮忙!

主要活动:

public class ProjektJimmuActivity extends ListActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        navigateTo("/sdcard/");
    }

    public void navigateTo(String dir){
        setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,getListOfFiles(dir)));
        getListView().setTextFilterEnabled(true);
    }

    public String[] getListOfFiles(String dir){
        File file = new File(dir);
        String[] files = file.list(new Filter());
        return files;
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
          Object item = l.getItemAtPosition(position);
          Toast.makeText(this,"Selection: "+ item.toString(), Toast.LENGTH_SHORT).show();
          setContentView(new PictureView(this,item.toString()));
    }

    private class Filter implements FilenameFilter{
        public boolean accept(File dir, String filename) {
            return (( filename.endsWith("jpg") || filename.endsWith("png") || filename.endsWith("gif") ) && !filename.startsWith("._") );
        } 
    }

}

图片查看:

public class PictureView extends View{

    private Bitmap bitmap;
    int width, height;
    private Canvas canvas;

    public PictureView(Context context, String pictureFile) {
        super(context);
        setFocusable(true);
        bitmap = BitmapFactory.decodeFile("/sdcard/"+pictureFile);
        height = bitmap.getHeight();
        width = bitmap.getWidth();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawColor(0xFFCCCCCC);
        canvas.drawBitmap(bitmap, null, null);
    }
}

【问题讨论】:

    标签: android listview


    【解决方案1】:

    因为您要扩展 ListActivity,所以您的布局 xml 文件中必须有一个 ListView,其 id 为 @android:id/list。扩展ListActivity表示这个活动,主要是一个列表,但旁边可能有一些组件。因此,当您假设一个活动最初是一个列表时,您应该在该活动的布局 xml 文件中指定一个列表,即主列表。该列表应该有 ID,@android:id/list。因此,只需将活动的ListView 的 id 字段设置为@android:id/list

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多