使用 RoboBinding 与 Android Binding 有何优缺点。
例如。
我正在尝试使用 gradle 将 Robobing 与 AspectJ 添加到 Android Studio 中的新项目中。当我单击“将项目与 Gradle 文件同步”时,该过程仍停留在“Gradle:下载https://jcenter.bintray.com/org/aspectj/aspectjtools/1.8.2/aspectjtools-1.8.2.jar ”最后8小时过夜。它没有超时或抛出一些错误。
我尝试手动下载aspectjtools-1.8.2.jar并将其放置在C:\Users\Knobloch.gradle\caches\modules-2\files-2.1\org.aspectj\aspectjtools\1.8.2中,但从附近的文件夹中发现他们有我需要的某种 GUID 子文件夹。
我尝试在 libs 文件夹中手动添加 jar 并使用:
compile files('libs/aspectjtools-1.8.2.jar')
Run Code Online (Sandbox Code Playgroud)
这不起作用。(现在我注意到模块配置中的 gradle 编译树函数是多余的)。
这是我的项目 build.gradle 的相关部分:
buildscript {
repositories {
jcenter()
maven() {
name 'RoboBinding AspectJPlugin Maven Repository'
url "https://github.com/RoboBinding/RoboBinding-aspectj-plugin/raw/master/mavenRepo"
}
}
dependencies {
classpath 'org.robobinding:aspectj-plugin:0.8.4'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
}
}
apply plugin: 'org.robobinding.android-aspectj'
apply plugin: 'com.neenbedankt.android-apt'
Run Code Online (Sandbox Code Playgroud)
以及我的 Module:app build.gradle 中的相关部分:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.android.support:support-v4:22.2.0'
compile "org.robobinding:robobinding:$robobindingVersion"
aspectPath "org.robobinding:robobinding:$robobindingVersion"
//alternatively …Run Code Online (Sandbox Code Playgroud) 我想在类的实例关闭或销毁时执行一两个操作。我正在寻找类似于活动中 onDestroy 的东西。
编辑
我添加了代码,指出如何从 Helper 类返回 SQLiteDatabase。我使用最终代码来确保数据库已关闭。
public class PMDBDatabase {
private static SQLiteDatabase DataBase = null;
private static PMDBHelper dbHelper = null;
public SQLiteDatabase getDatabase(Context ctx) throws SQLException {
if (DataBase == null) {
dbHelper = PMDBHelper.getInstance(ctx);
DBOpen();
} else
if(!DataBase.isOpen())
DBOpen();
return DataBase;
}
private void DBOpen() throws SQLException {
DataBase = dbHelper.getWritableDatabase();
}
public void close(){
if(DataBase != null) DataBase.close();
}
protected void finalize() throws Throwable {
try {
close();
} finally {
super.finalize();
}
} …Run Code Online (Sandbox Code Playgroud) 这就是我当前的导航抽屉的样子:
我把它分成了4组.我所要做的就是给每个小组一个不同的文字颜色.我正在尝试这些选项SETTINGS,FEEDBACK并且TERMS AND CONDITIONS有一个较小的字体和一点黑色.我搜索过,但找不到单独定制导航抽屉组的方法.这是我为菜单编写的代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="@+id/menu"
android:checkableBehavior="single">
<item
android:id="@+id/nav_targets"
android:icon="@drawable/icon_target"
android:title="Targets" />
<item
android:id="@+id/nav_testing"
android:icon="@drawable/icon_testing"
android:title="Testing" />
<item
android:id="@+id/nav_course_work"
android:icon="@drawable/icon_course_work"
android:title="Course Work" />
<item
android:id="@+id/nav_schedule"
android:icon="@drawable/icon_schedule"
android:title="Schedule" />
<item
android:id="@+id/nav_profile"
android:icon="@drawable/icon_profile"
android:title="Profile" />
</group>
<group
android:id="@+id/settings">
<item
android:title="SETTINGS"
android:id="@+id/settings_item"></item>
</group>
<group
android:id="@+id/feedback">
<item
android:title="FEEDBACK"
android:id="@+id/feedback_item"></item>
</group>
<group
android:id="@+id/TnC">
<item
android:title="TERMS & CONDITIONS"
android:id="@+id/t_n_c_item"></item>
</group>
Run Code Online (Sandbox Code Playgroud)
有没有办法实现它?
ViewPager我的MainActivity中有一个.其中的每一页都是片段.因此,每次向右或向左滑动时,都会创建一个新的片段实例,并相应地更新片段视图.
我也有两个按钮:LEFT和RIGHT导航.这些按钮位于片段内,而不在活动中.用户可以滑动或者按相关按钮在页面之间导航.
问题在于:由于我正在通过MainActivity更改视图,如何onClick在Activity中检测这些按钮的事件以更新片段?
这是PagerAdapter类(从所有地方删除所有不相关的代码):
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// logic part for the views.
return PlaceholderFragment.newInstance(sectionNumber, questionStatus, questionOrder, showNext, showPrevious);
}
Run Code Online (Sandbox Code Playgroud)
这是PlaceHolderFragment班级:
public class PlaceholderFragment extends Fragment{
//some global variables
public static PlaceholderFragment newInstance(int sectionNumber, int questionStatus, String questionOrder, boolean showNext, boolean showPrevious) {
PlaceholderFragment fragment = new PlaceholderFragment();
//setting up the arguments …Run Code Online (Sandbox Code Playgroud) 我正在尝试将PNG图像资源导入到我的项目中.但是形象正在失去细节.它只是保留了外部背景.图像转换为可靠资产:
如您所见,源资产在中心有一个白色勾号.但是,在导入之后,它仍然是一个没有刻度的实心圆圈.有解决方案吗
更新:尝试Android资产工作室,但结果相同.我错过了什么?:
我有一个电子邮件字段EditText.我正在尝试在验证为真时在文本字段的末尾添加绿色勾号图标,并且setError当它为假时.
这是我正在使用的代码片段:
email.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
String mail = email.getText().toString();
if(!android.util.Patterns.EMAIL_ADDRESS.matcher(mail).matches()) {
email.setError("Please enter a valid email address");
}
else {
Log.i("YaY","Email is valid!!!");
email.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.validated, 0);
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
问题:
虽然我可以看到日志Yay: Email is valid!!!,但似乎没有设置图标,因为我看不到它.但是当我改变if-conditionto false,这意味着setError永远不会被调用时,我可以看到日志和图标.
为什么我看到这种奇怪的行为的任何解释?我错过了什么?
我有以下代码:
private Facility updateFacility(Facility newFacility, Facility oldFacility) {
if (newFacility.getCity() != null)
oldFacility.setCity(newFacility.getCity());
if (newFacility.getContactEmail() != null)
oldFacility.setContactEmail(newFacility.getContactEmail());
if (newFacility.getContactFax() != null)
oldFacility.setContactFax(newFacility.getContactFax());
if (newFacility.getContactName() != null)
oldFacility.setContactName(newFacility.getContactName());
// ......
}
Run Code Online (Sandbox Code Playgroud)
大约有 14 个这样的检查和分配。也就是说,除了少数,我需要修改 oldFacility 对象的所有字段。我得到了这个代码 14 的圈复杂度,根据 SonarQube,这是“授权大于 10”。关于如何降低圈复杂度的任何想法?
我的构建在Android Studio中需要很长时间,超过2分钟,有时3分钟.我尝试了StackOverflow中解释的一些方法来加速构建时间,但它并没有解决我的问题.
app模块的build.gradle代码如下:
buildscript {
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'io.fabric.tools:gradle:1.+'
}
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
repositories {
maven { url 'https://maven.fabric.io/public' }
}
// Adding The GIT SHA to Crashlytics crash reporting
def gitSha = 'git rev-parse --short HEAD'.execute([], project.rootDir).text.trim()
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.moymer"
minSdkVersion 11
targetSdkVersion 22
multiDexEnabled true
versionCode 5
versionName "2.0.0"
buildConfigField "String", "GIT_SHA", "\"${gitSha}\""
}
buildTypes {
release {
minifyEnabled …Run Code Online (Sandbox Code Playgroud) 在我的MainActivity类中,attachBaseContext如果在我的视图中按下按钮,我想停止覆盖该方法.
情况如下:
public class MainActivity extends AppCompatActivity {
boolean value = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setting content view and stuff
}
//the following should be overridden only if value == true.
//I can change the value to false by clicking a button in my view.
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(ZeTarget.attachBaseContext(base,this));
}
public void stopOverriding (View view) {
value = false;
}
Run Code Online (Sandbox Code Playgroud)
在我看来,我的主活动布局中有一个按钮,可以stopOverriding()在单击时调用该方法:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button"
android:onclick="stopOverriding"
android:text="@string/change"/>
Run Code Online (Sandbox Code Playgroud)
在我的attachBaseContext() …