小编Sve*_*ver的帖子

在应用程序处于后台时解除DialogFragment的正确方法

我开始使用DialogFragment,因为他们通过方向更改和其他东西很好地工作.但是我遇到了令人讨厌的问题.

我有AsyncTask显示进度DialogFragment并解散它onPostExecute.一切正常,除非在onPostExecute应用程序处于后台时发生(例如,在按下Home按钮后).然后我在DialogFragment解雇时得到了这个错误 - " Can not perform this action after onSaveInstanceState".卫生署.常规对话框工作得很好.但不是FragmentDialog.

所以我想知道,在应用程序处于后台时,解雇DialogFragment的正确方法是什么?我没有真正使用Fragments,所以我认为我只是遗漏了一些东西.

android android-fragments android-dialog android-dialogfragment

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

BroadcastReceiver为一个事件接收多个相同的消息

我注册了一个监听网络事件的接收器:

<receiver 
    android:label="NetworkConnection"
    android:name=".ConnectionChangeReceiver" >
    <intent-filter >
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

接收器也很简单:

public class ConnectionChangeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
        if (activeNetInfo != null) {
                Log.v("@@@","Receiver : " + activeNetInfo);
        } else {
            Log.v("@@@","Receiver : " + "No network");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,当连接Wifi时,我连续收到3条相同的消息,如下所示:

Receiver : NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true
Receiver : NetworkInfo: type: …
Run Code Online (Sandbox Code Playgroud)

networking android broadcastreceiver wifi

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

如何将ListView滚动到底部?

我虽然这将是一个简单的任务,但显然没有办法将listview滚动到底部.我发现的所有解决方案都使用setSelection(lastItem)方法的变体,它只将选择设置为最后一项,但不会滚动到它的底部.

在我的情况下,我有一个空的列表视图(有一个长的空视图标题集),我想滚动到它的底部.

那么,有没有办法做到这一点?

编辑:

所以对于那些感兴趣的人来说,工作解决方案是:

getListView().setSelectionFromTop(0, -mHeader.getHeight());
Run Code Online (Sandbox Code Playgroud)

getListView().scrollTo(mOffset)
Run Code Online (Sandbox Code Playgroud)

这也有效,右偏移(根据当前滚动位置计算),但可能会给你一些意想不到的结果.

android android-listview android-scroll

14
推荐指数
4
解决办法
3万
查看次数

如何在list-style-type中声明列表项(<li>)标记/标签?

可以说我有一个这样的列表:

<ul style="list-style-type: upper-latin;">
  <li>Lorem</li>
  <li>Ipsum</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

(list-style-type可能是任何东西 - 上罗马,片假名,低希腊)

list-style-type: upper-latin;将在每个列表项的前面放一个字母(从A开始).有没有办法获得任何给定列表项的这封信?我可以使用jQuery .index()或类似的方法迭代列表.

或者,也许有办法从风格中提取标记?

这里的答案仅适用于拉丁字母列表.

html javascript css jquery html-lists

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

如何在Android上跟踪Firebase中的监听器?

我有一个位置的给定用户的聊天室列表,以及另一个位置的给定聊天室的消息总数.我想跟踪聊天室用户所属的一些消息.

我有以下片段:

//getting all chat rooms this user belongs to
mFirebase.child("myChatRooms").child("testUser").addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded (DataSnapshot dataSnapshot, String previousKey){
        for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
            ChatRoom myRoom = postSnapshot.getValue(ChatRoom.class);

            //listening to  message count in every chat room user belongs to
            mFirebase.child("chatRoomMessageCount").child(postSnapshot.getKey()).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                        //number of messages have changed
                }

                @Override
                public void onCancelled(FirebaseError firebaseError) {

                }
            });
        }
    }

    //......
}
Run Code Online (Sandbox Code Playgroud)

问题是,如何在调用onChildRemoved时删除所有这些ValueEventListener,或者我将不再需要它们?

处理这种情况的建议方法是什么?我应该在HashMap中存储子键和侦听器并自己跟踪它们还是有一些方法可以删除给定firebase位置的所有侦听器?

java android firebase

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

如何在多行TextView的末尾插入ImageView?

也许这是一个愚蠢的问题,但我无法找到一种方法来在TextView的第二行末尾插入小图像.图像始终显示在整个文本视图的右侧,而不是行结束.

我想插入这样的图像:

TextTextTextTextTextTextTextTextTextText
TextTextTextText. <ImageView>
Run Code Online (Sandbox Code Playgroud)

我得到的是:

TextTextTextTextTextTextTextTextTextText  <ImageView>
TextTextTextText. 
Run Code Online (Sandbox Code Playgroud)

我希望有办法做到这一点.

源:

<RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TESTESTESTESTESTESTESTESTESTESTESTESTES"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#FFFFFF" />

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/tv"
            android:src="@drawable/icon" />
    </RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

android interface textview imageview

8
推荐指数
2
解决办法
8236
查看次数

Android WebView + loadUrl与javascript + onPageFinished =滞后

我有WebView加载一些页面,当它完成时我应用一些javascript魔法来搞乱DOM.一切都很好,页面加载,onPageFinished我只是打电话wv.loadUrl(javascript);

但我不想看到加载过程,以及javascript如何工作,我只需要结果,所以我wv.setVisibility(View.INVISIBLE);从一开始就使我的视图不可见,并在完成所有操作后再次显示它.这就是问题发生的地方.

这段代码应该在javascript完成后使视图可见,但wv.setVisibility(View.VISIBLE)在javascript之前触发.所以有一会儿我看到了页面以及如何通过javascript更改它.这只是丑陋的.

  public void onPageFinished (WebView view, String url) {
         wv.loadUrl(javascript);
         view.getSettings().setLoadsImagesAutomatically(true);
         wv.setVisibility(View.VISIBLE);

    }
Run Code Online (Sandbox Code Playgroud)

我得到了loadUrl的异步工作,所以我尝试用另外的"make first view visible"方法制作另一个WebViewClient onPageFinished,并用它来调用JS.但它只是随着NPE错误而崩溃.

wv2.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished (WebView view, String url) {
     wv.setVisibility(View.VISIBLE);
}
});
Run Code Online (Sandbox Code Playgroud)

现在我只是在javascript(SystemClock.sleep(5000))之后添加延迟,但这就像..是的.

javascript android webview

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

Gallery setSelection不会触发图像选择器

我有画廊小部件,当你滚动它时,当前选择的图像有边框 - 只是简单的选择器,像这样

<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:state_selected="true"
    android:drawable="@drawable/thumbnail_frame" />
<item
    android:drawable="@android:color/transparent" />
Run Code Online (Sandbox Code Playgroud)

并在画廊适配器的getView中附加这样的

image.setBackgroundDrawable(getResources().getDrawable(R.drawable.xxx));
Run Code Online (Sandbox Code Playgroud)

问题是,当我使用setSelection()更改图库选择时,所选项目没有边框.但是,当我只是用手指边框滚动选定的项目工作正常.我认为,setSelection()不会触发setSelected()或类似的东西.

我想,解决方案是调用setSelected()和setSelection(),但是如何为当前选择的ImageView调用它?或者还有其他方法吗?

android gallery imageview

6
推荐指数
1
解决办法
1267
查看次数

自定义SimpleCursorAdapter,数据库查询和NullPointerException

我正在尝试从数据库中填充ListView,并使用花哨的删除按钮调整每一行.所以我创建了列表Activity和自定义SimpleCursorAdapter.

这是主要的ListView活动:

    public class EditEntries extends ListActivity {
    Cursor cursor;
    DBAdapter db = new DBAdapter(this);
    private static String[] FROM = { _ID, SCORE_COLUMN,
            "date(time, 'localtime')", };
    private static int[] TO = { R.id.rowid, R.id.title, R.id.time, };

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.entries_list);
        try {
            cursor = getEvents();
            showEvents(cursor);
        } finally {
            db.close();
        }
    }

    private void showEvents(Cursor cursor) {
        // Set up data binding
        SMSimpleCursorAdapter adapter = new SMSimpleCursorAdapter(this,
                R.layout.entries_list_item, cursor, FROM, TO);
        setListAdapter(adapter);

    }

    private Cursor getEvents() { …
Run Code Online (Sandbox Code Playgroud)

database sqlite android adapter android-listview

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

平滑图像缩放双击

我有一个想要在双击时平滑放大的ImageView.

目前我有像这样的变焦工作

        public boolean onDoubleTap(MotionEvent e) {
        ImageView imageView = (ImageView) findViewById(imageViewId);
         int width = imageView.getWidth();
         int height = imageView.getWidth();
         float maxScale;
         if ( width < height ) {
         maxScale = (float) (width * Math.pow(1.5, 6));
         } else {
         maxScale = (float) (height * Math.pow(1.5, 6));
         }

         Drawable d = imageView.getDrawable();
         int imageWidth = d.getIntrinsicWidth();
         int imageHeight = d.getIntrinsicHeight();
         float[] value = new float[9];
         matrix.getValues(value);
         scaleWidth = (int)(imageWidth * value[Matrix.MSCALE_X]);
         scaleHeight = (int)(imageHeight * value[Matrix.MSCALE_Y]);

         if ( (scaleWidth * 2) …
Run Code Online (Sandbox Code Playgroud)

android zoom imageview

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

与线程混淆 - 处理程序阻止UI线程

我有一个耗时的任务(迭代文件并将其内容发送到服务器)我想在后台线程中执行,在特定的interwal中(这就是我想使用Handler的原因).

从UI线程我有这样的调用:

LogsManager lm;
lm = new LogsManager(this);
lm.processLogFiles();
Run Code Online (Sandbox Code Playgroud)

LogsManager课堂上我有以下代码:

public void processLogFiles(){
    Handler mHandler = new Handler();
    mHandler.postDelayed(logsRunable, 1000);    
}

private Runnable logsRunable = new Runnable() {
        @Override
        public void run() {
            File f = new File(Environment.getExternalStorageDirectory()+Constants.LOG_DIR);             
            File[] logFiles = f.listFiles();
            for (int i = 0; i < logFiles.length; i++) {
                readLogs(logFiles[i]); // executes some other methods inside
            }
        }
    };
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,这只是Handler调用方法Runnable.不幸的是,它也阻止了我的UI线程.是不是Handler应该开始一个新线程Runnable?我也在我的应用程序的其他部分使用处理程序,它们工作得很好.我做错了吗?

multithreading android

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