我正在创建一个包含外键引用的表.我想知道所需的语法.大多数情况下,我见过以下内容(来自http://www.sqlite.org/foreignkeys.html#fk_basics):
CREATE TABLE artist(
artistid INTEGER PRIMARY KEY,
artistname TEXT
);
CREATE TABLE track(
trackid INTEGER,
trackname TEXT,
trackartist INTEGER,
FOREIGN KEY(trackartist) REFERENCES artist(artistid)
);
Run Code Online (Sandbox Code Playgroud)
但是,从同一个站点(http://www.sqlite.org/foreignkeys.html#fk_actions)我看到:
CREATE TABLE artist(
artistid INTEGER PRIMARY KEY,
artistname TEXT
);
CREATE TABLE track(
trackid INTEGER,
trackname TEXT,
trackartist INTEGER REFERENCES artist(artistid) ON UPDATE CASCADE
);
Run Code Online (Sandbox Code Playgroud)
后一种语法更简洁,但我想知道结果是否有所不同(除了ON UPDATE CASCADE,当然有效果;我只包括它,因为我完全从引用的网站复制代码,因为我不知道上面的语法只在制作这样的规范时才适用).我在Android工作,如果重要的话.
我想在我的应用程序中进行以下布局处理:

正如您所看到的那样,允许文本尽可能宽,而不会将屏幕右侧显示的其他视图从屏幕上移开,根据需要进行椭圆化处理.永远不会有超过3个颜色样本,并且不会少于1个,并且所有样本和圆圈中的x必须始终可见.当文本很短时,它的行为应该与最后两行(蕨类植物)中的行为一样.
我试图将文本和图像放在一个LinearLayout,但是当文本太长时,图像不可见(或不完全可见).我假设有一些方法可以表明图像应该总是占用他们需要的空间,TextView占用剩余部分或尽可能多的需要,但我似乎无法弄清楚如何.我不知道一个RelativeLayout是否会更好地为此工作,或者可能是一个TableLayout/ TableRow或者GridLayout,虽然我读过的任何内容似乎都无法涵盖这种情况.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/plant_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:maxLines="1"
android:singleLine="true"
android:ellipsize="end"
android:layout_marginRight="3dp"/>
<LinearLayout
android:id="@+id/color_0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/btn_remove_plant"
android:visibility="invisible"/>
</LinearLayout>
<LinearLayout
android:id="@+id/color_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:visibility="gone">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/btn_remove_plant"
android:visibility="invisible"/>
</LinearLayout>
<LinearLayout
android:id="@+id/color_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:visibility="gone">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/btn_remove_plant"
android:visibility="invisible"/>
</LinearLayout>
<ImageView
android:id="@+id/remove_plant"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/btn_remove_plant"
android:layout_marginLeft="3dp"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud) 我正在使用dispatchTouchEvent来拦截活动中的触摸。这是我的重写方法的代码:
public boolean dispatchTouchEvent(MotionEvent ev) {
int[] l = new int[2];
mVideoImage.getLocationOnScreen(l);
int left = l[0];
int top = l[1];
int w = mVideoImage.getWidth();
int h = mVideoImage.getHeight();
float x = ev.getX();
float y = ev.getY();
if (x > left && x < (left + w) && y > top && y < (top + h)) {
startActivity(new Intent(getApplicationContext(), ActivityVideoPlayer.class));
}
else {
finish();
}
return super.dispatchTouchEvent(ev);
}
Run Code Online (Sandbox Code Playgroud)
问题在于,每次我触摸屏幕时,dispatchTouchEvent都会被调用2到3次(通常是3次),而条件代码中的代码执行3次时,它将启动3个ActivityVideoPlayer活动,而我是不希望的。
为什么会发生这种情况,如何从1次触摸中仅获得1次触摸,或者至少解决此问题,所以我的ActivityVideoPlayer无法启动3次?我想我可以做到这一点,或者不管使一次给定种类的一项活动一次活跃的原因是什么,现在我考虑一下,尽管知道这里发生的事情仍然很高兴。
我想知道也许我触摸的屏幕上的每一层都没有记录一次触摸(视图和视图所在的视图组),在这种情况下,似乎我应该能够在触摸之前消耗掉触摸到多层。我尝试更改dispatchTouchEvent来返回true和false,以查看是否可以这样做,但是没有运气。
提前致谢。