小编And*_*rew的帖子

具有多个项目布局的ListView

我有一个ListView关于我的ListActivity,我希望它们的行ListView是3种不同布局中的一种.我列表中的第一项始终使用布局A,列表中的第二项始终使用布局B,所有后续项目将使用布局C.

这是我的getView函数:

@Override
public View getView(int position, View convertView, ViewGroup parent) { 
    // get the View for this list item
    View v = convertView;
    if (v == null) {
        LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        switch (position) {
            case 0:
                v = vi.inflate(R.layout.layout_A, parent, false);
                break;
            case 1:
                v = vi.inflate(R.layout.layout_B, parent, false);
                break;
            default:
                v = vi.inflate(R.layout.layout_C, parent, false);
                break;
        }
    }   
    switch (position) {
        case 0:
            TextView txtLabel1 = (TextView)findViewById(R.id.label1);
            TextView txtLabel2 = (TextView)findViewById(R.id.label2); …
Run Code Online (Sandbox Code Playgroud)

layout android listview

13
推荐指数
1
解决办法
2万
查看次数

扩展实现Parcelable的类

我有一个类,我们称之为A类,它实现了Parcelable.

我有第二堂课,我们称之为B班,扩展到A班.

我的问题是:

如何将B类成员变量写入Parcel,然后将其父类(即:A类)成员变量写入Parcel(并随后将其读入)?

是否有一些漂亮的技巧,不需要重写A类的包裹代码?或者我只需要在A类中重写Parcel代码并为B类成员变量添加其他代码?

android parcelable

13
推荐指数
1
解决办法
5321
查看次数

按列表项的默认drawable是什么

当用户按下ListView项目(android:state_pressed ="true")时,它会闪烁一个黄色的阴影(或者你可以按住).

这有什么可吸引人的?我已经创建了自己的选择器,因为我想要自己的ListView项目颜色,但是我失去了按下的颜色.

有一个关于皮肤按钮的Android文档引用了#ffff0000,但这会产生红色.

有谁知道它是什么以及如何引用它?

android state selector

11
推荐指数
1
解决办法
1万
查看次数

从线程发布Toast消息

我的应用程序启动一个线程来查询Web上的一些数据.我没有找到任何内容时显示Toast消息,但我的应用程序总是崩溃.

我已尝试在线程中使用应用程序Context,如下所示:

Toast.makeText(getApplicationContext(), "testttt", Toast.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)

我还尝试使用Toast调用创建一个Runnable并从Thread调用runOnUiThread(runnable)(此runnable中的Toast调用使用Activity作为第一个参数).

有没有人对如何做到这一点有任何想法?

multithreading android toast

11
推荐指数
1
解决办法
3万
查看次数

Gradle在错误的项目的lib文件夹中寻找aar

我有一个由多个项目组成的Android应用程序.其中一个项目是一个只扩展Application对象的App项目.

在该app项目的build.gradle中,我将其他项目添加为依赖项.

我刚刚创建了一个新模块来存放我想要使用的SDK(aar).我还将它添加到我的应用程序项目的build.gradle中.

compile project(':newmodule-thesdk')
Run Code Online (Sandbox Code Playgroud)

在newmodule-thesdk的libs文件夹中,我添加了aar文件.我们称之为thesdk.aar.

repositories {
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    compile(name:'thesdk-1.0', ext:'aar')
}
Run Code Online (Sandbox Code Playgroud)

当我尝试同步gradle时,同步失败,因为我的应用程序项目的libs文件夹中不存在.sdk-1.0 .为什么要在那里寻找呢?为什么不只是在newmodule-thesdk项目中找到它?

android android-gradle-plugin

11
推荐指数
1
解决办法
517
查看次数

在Android的WebView中通过javascript捕获页面重定向

我的应用程序中有一个WebView,显示不属于我的页面.我希望的行为是,如果用户点击任何链接,则启动设备的浏览器应用程序,并在那里加载生成的页面.不幸的是,这个页面正在做一些奇怪的事情,所以shouldOverrideUrlLoading()不要开火.

我尝试的解决方案是将一些javascript挂钩到pushState并使用界面运行Android代码来启动浏览器应用程序.

这是我的界面:

public class LaunchExternalBrowserHack {
    Context mContext;

    LaunchExternalBrowserHack(Context c) {
        mContext = c;
    }

    @JavascriptInterface
    public void launchExternalBrowser(String url) {
        openUrl(url);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在页面中注入了一些javascript onPageFinished():

public void onPageFinished(WebView view, String url) {
     mWebView.loadUrl(javascript);
}
Run Code Online (Sandbox Code Playgroud)

这是我的javascript:

private final String javascript = "javascript:history.pushState = function (state, title, url) { console.log(url); console.log(location.href); Uphoria.launchExternalBrowser(location.origin, url); };";
Run Code Online (Sandbox Code Playgroud)

当然,我正在添加界面WebView:

mWebView.addJavascriptInterface(new LaunchExternalBrowserHack(getContext()), "Android");
Run Code Online (Sandbox Code Playgroud)

所以这似乎有效.浏览器应用程序正在启动,下一页正在打开.

但是,WebView也在向前发展.我想阻止这一点,但我找不到阻止WebView向前移动的方法,同时仍然允许我捕获转发URL并启动浏览器应用程序.正如我之前提到的,使用这个网页,shouldOverrideUrlLoading没有解雇.

想法?

javascript android android-webview

11
推荐指数
2
解决办法
1099
查看次数

小部件未出现在小部件列表中

我在stackoverflow上读过几个关于这个的问题,但没有一个答案能解决我的问题.

我正在尝试向我的应用添加主屏幕小部件,我的小部件不会出现在Android的小部件列表中.

我尝试重新启动设备,重新安装应用程序,更改配置文件中的参数,确保SD卡上没有安装应用程序.什么都行不通.

这是我目前的代码:

在AndroidManifest.xml的应用程序标记内:

<receiver
    android:name=".GulpWidgetProvider"
    android:icon="@mipmap/ic_launcher"
    android:label="Gulp">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data
        android:name="android.appwidget.provider"
        android:resource="@xml/gulp_widget_info" />
</receiver>
Run Code Online (Sandbox Code Playgroud)

在/res/xml/gulp_widget_info.xml里面:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialLayout="@layout/layout_widget"
    android:minHeight="150dip"
    android:minWidth="400dip"
    android:updatePeriodMillis="86400000"
    android:widgetCategory="home_screen"
    android:resizeMode="none"
    android:minResizeHeight="150dip"/>
Run Code Online (Sandbox Code Playgroud)

在/res/layout/layout_widget.xml里面:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="150dip"
    android:background="@drawable/gradient"
    android:gravity="center_horizontal|top">

    <RelativeLayout
        android:layout_width="170dip"
        android:layout_height="150dip"
        android:gravity="center">


        <ProgressBar
            android:id="@+id/widget_consumption_progress_bar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="150dip"
            android:layout_height="150dip"
            android:layout_centerInParent="true"
            android:indeterminate="false"
            android:max="100"
            android:progress="0"
            android:progressDrawable="@drawable/progressbar"
            android:secondaryProgress="100" />

        <ProgressBar
            android:id="@+id/widget_time_progress_bar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="150dip"
            android:layout_height="150dip"
            android:layout_centerInParent="true"
            android:indeterminate="false"
            android:max="100"
            android:progress="0"
            android:progressDrawable="@drawable/progressbar2"
            android:secondaryProgress="100" />

        <TextView
            android:id="@+id/widget_water_consumed"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:fontFamily="sans-serif-light"
            android:gravity="center"
            android:maxLines="1"
            android:textColor="@color/white"
            android:textSize="30sp" />

        <TextView
            android:id="@+id/widget_unit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" …
Run Code Online (Sandbox Code Playgroud)

android android-widget appwidgetprovider android-appwidget

10
推荐指数
1
解决办法
955
查看次数

检测ListView上的手势有问题

我有一个包含ViewFlipper的Activity.ViewFlipper包含2个布局,这两个布局基本上只是ListView.

所以这里的想法是我有两个列表,从一个列表导航到另一个列表,我会使用水平滑动.

我有那个工作.但是,当滑动开始执行时,您的手指所在的列表项目,也会长按该项目.

这是我的相关代码:

public class MyActivity extends Activity implements OnItemClickListener, OnClickListener {

    private static final int SWIPE_MIN_DISTANCE = 120;
    private static final int SWIPE_MAX_OFF_PATH = 250;
    private static final int SWIPE_THRESHOLD_VELOCITY = 200;

    private GestureDetector mGestureDetector;
    View.OnTouchListener mGestureListener;

    class MyGestureDetector extends SimpleOnGestureListener {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            try {
                if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                    return false;
                // right to left swipe
                if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) …
Run Code Online (Sandbox Code Playgroud)

android listview gesture viewflipper gesturedetector

9
推荐指数
1
解决办法
8453
查看次数

向IntentService询问有关其队列的信息

我有一个IntentService,它将需要对我的Web服务器进行的Web服务调用进行排队.因此,每个Intent都是要进行的Web服务调用.

我想设置一些东西,我的应用程序可以询问这个IntentService,如果它有任何含有特定数据的Intent(IE:"你是否已经在等待向云询问x数据?或者我是否需要告诉你做到了吗?").

关于如何扩展IntentService来做这个有什么建议吗?是否可以遍历IntentService的Intent队列?或者我需要获取IntentService代码并进行更改吗?

我唯一的另一个想法是向数据库添加一个表并记录哪些调用在队列中,每个日志在完成后从表中删除.

android intentservice android-intentservice

9
推荐指数
1
解决办法
4053
查看次数

为什么在onResume()的View上调用getWidth()返回0?

我读过的所有内容都说您不能在构造函数中调用getWidth()getHeight()在上调用View,但我在中调用它们onResume()。届时是否应该绘制屏幕布局?

@Override
protected void onResume() {
    super.onResume();

    populateData();
}

private void populateData() {
    LinearLayout test = (LinearLayout) findViewById(R.id.myview);
    double widthpx = test.getWidth();
}
Run Code Online (Sandbox Code Playgroud)

android android-layout activity-lifecycle android-view android-viewtreeobserver

9
推荐指数
2
解决办法
2559
查看次数