小编hBr*_*ent的帖子

使用外键创建表的SQLite语法

我正在创建一个包含外键引用的表.我想知道所需的语法.大多数情况下,我见过以下内容(来自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工作,如果重要的话.

sqlite android-sqlite

43
推荐指数
2
解决办法
5万
查看次数

使TextView尽可能宽,而不会挤出其他视图

我想在我的应用程序中进行以下布局处理:

在此输入图像描述

正如您所看到的那样,允许文本尽可能宽,而不会将屏幕右侧显示的其他视图从屏幕上移开,根据需要进行椭圆化处理.永远不会有超过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)

android android-layout

6
推荐指数
2
解决办法
1415
查看次数

一键登录dispatchTouchEvent多次注册

我正在使用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,以查看是否可以这样做,但是没有运气。

提前致谢。

android

0
推荐指数
1
解决办法
549
查看次数

标签 统计

android ×2

android-layout ×1

android-sqlite ×1

sqlite ×1