我已经在xml布局中声明了GirdView,如下所示.
<GridView
android:id="@+id/movies_gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:drawSelectorOnTop="true"
android:columnWidth="92dp"
android:numColumns="auto_fit"
android:stretchMode="spacingWidthUniform"
android:gravity="center_horizontal" />
Run Code Online (Sandbox Code Playgroud)
我打算在此处显示固定大小的图像(垂直矩形不是正方形),GridView.
我将其设置为columnWidth
,auto_fit
以便可以根据GridView.
可用的屏幕大小最佳地使用水平空间.我已设置为stretchMode
,spacingWidthUniform
以便将列放置在距离所有边相等的距离.
我想把verticalSpacing
等于horizontalSpacing
.我不能在xml中这样做,因为在运行时,horizontalSpacing
它将取决于屏幕上的可用空间.此外,当设备方向改变时,horizontalSpacing
将改变.
我的问题是:
我怎样才能确保verticalSpacing
永远等于horizontalSpacing
?
如何GridView
从头开始布局其第一列加上最后一列的填充和结束布局到GridView
减去填充的结尾?
编辑1
我尝试使用@simas解决方案来使用提到的自定义网格视图.为了那个原因,
我把这个类复制到了我的源目录.
在布局xml中包含此网格视图,如下所示.
<com.aviras.ashish.popularmoviesapp.widgets.CustomGridView
android:id="@+id/movies_gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="@dimen/grid_item_width"
android:drawSelectorOnTop="true"
android:gravity="center_horizontal"
android:numColumns="auto_fit"
android:stretchMode="spacingWidthUniform"
tools:listitem="@layout/grid_item_movie_poster" />
Run Code Online (Sandbox Code Playgroud)
将适配器设置为此gridview,如下所示
CustomGridView moviesGridView = (CustomGridView) rootView.findViewById(R.id.movies_gridview);
moviesGridView.setAdapter(new MoviesAdapter(rootView.getContext().getApplicationContext(), mMovies));
Run Code Online (Sandbox Code Playgroud)它仍然显示列和行的不同间距,如下所示.
编辑2
@simas在第二个问题中通过'开始布局'我的意思是GridView
应该开始绘制第一列在应该结束时的GridView
最后一列和最后一列.此外,列和行应具有相等的间距.如果这更能澄清我的问题,请告诉我.GridView
GridView
当我打电话时会发生什么,当我打电话时会发生SQLiteOpenHelper.close()
什么SQLiteDatabase.close()
?
对于我的android应用程序,我总是创建类的子Application
类,其中单个实例是MySQLiteOpenHelper
其子类SQLiteOpenHelper
,将由所有应用程序组件(如Services,Activities和BroadcastReceivers)共享.
在MySQLiteOpenHelper
,我有单个实例SQLiteDatabase
.我MySQLiteOpenHelper
在Application.onCreate()方法中创建实例,从不调用close()
任何SQLiteOpenHelper
或SQLiteDatabase
实例.虽然我query()
在每个SQLiteStatement
用来插入,更新或删除数据的每个游标对象上显式调用close().
直到现在,它没有任何问题,工作正常.但最近我收到用户的崩溃日志.抛出的异常是SQLiteDatabaseLockedException
.我看过说的文件
如果数据库引擎无法获取数据库锁,则需要执行其工作.
我不明白当我只使用单个数据库实例并且文档说所有数据库调用都是由系统序列化时,他们在获取数据库锁时会出现什么问题.此外,我不是使用beginTransaction()或任何其他相关方法开始或结束任何数据库事务.
经过一番搜索,我认为我应该调用close()
我的数据库连接.
我的问题是:
我在这里使用正确的方法(我不需要在其他应用程序或第三方应用程序之间共享数据,因此不使用ContentProviders)?
我什么时候应该关闭数据库连接?
另外,我应该打电话给关闭MySQLiteOpenHelper
还是SQLiteDatabase
?
MySQLiteOpenHelper.java的代码:
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
public static String TAG = Common.MAIN_TAG + "MySQLiteOpenHelper";
public static int DATABASE_VERSION = 19;
private static String DB_PATH = null;
public static final String DB_NAME = "data.sqlite";
private …
Run Code Online (Sandbox Code Playgroud)