对不起我的英语不好。我需要使用 Android 数据绑定处理按钮单击。我包含在 content_main.xml 数据绑定中。
<data>
<variable
name="temp"
type="skubyev.anton.navigationdrawer.DataBindingClass.MainActivityData" />
<variable
name="presenter"
type="skubyev.anton.navigationdrawer.DataBindingClass.MainActivityPresenter"/>
</data>
....
<android.support.design.widget.FloatingActionButton
android:onClick="@{() -> presenter.onShowData(temp)}"
Run Code Online (Sandbox Code Playgroud)
但是 MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ContentMainBinding binding = DataBindingUtil.setContentView(this, R.layout.content_main);
MainActivityPresenter mainActivityPresenter = new MainActivityPresenter(this);
MainActivityData mainActivityData = new MainActivityData("??? ?????");
binding.setTemp(mainActivityData);
binding.setPresenter(mainActivityPresenter);
setContentView(R.layout.activity_main);
....
@Override
public void showData(MainActivityData mainActivityData) {
String textForRecognition = mainActivityData.getTextForRecognition();
Toast.makeText(this, textForRecognition, Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)
我希望函数showData运行,然后单击 content_main 中的 FloatingActionButton。但是 showData - MainActivity 类中的函数。因此,据我所知,当您单击位于content_main.xml上的按钮时,它不会被调用。我该怎么办?创建一个单独的类 ContentActivity.java 和函数 showData。
我只想让 MainActivity.java 负责处理对 …
java data-binding android navigation-drawer android-databinding
用于数据绑定
1)我已经补充说
android {
dataBinding {
enabled = true
}
Run Code Online (Sandbox Code Playgroud)
到我的项目build.gradle
,但发生此错误:
Error:(5, 0) Gradle DSL method not found: 'dataBinding()'
Possible causes:
.The project 'exampleDatabinding' may be using a version of Gradle that does
not contain the method.
Gradle settings
.The build file may be missing a Gradle plugin.
Apply Gradle plugin
Run Code Online (Sandbox Code Playgroud)
2)然后我补充说:
apply plugin: "com.android.databinding"
(项目build.gradle
)
和classpath "com.android.databinding:dataBinder:1.0-rc1"
(项目build.gradle
)
但是同样的错误发生了.
我一直在尝试使用android studio模拟器,但是无法在模拟器上运行我的App。当我运行我的应用程序时,它将显示具有以下详细信息的模拟器:
启用Hax
蜡ram_size 0x40000000
HAX正在运行,并且模拟器在快速virt模式下运行。
控制台在端口5554上; 5555端口上的ADB
之后,将转到下一个TAB Launching应用,并显示等待设备上线的信息。之后,它显示错误:
Error while waiting for device: Time out after 300 seconds waiting for emulator to come online.
Run Code Online (Sandbox Code Playgroud)
任何人都知道任何解决方案。
基本上我可以在 recyclerview adaper 上使用多行而没有任何问题,例如以下代码:
@Override
public ShowBookItemsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
int layout = -1;
switch (viewType) {
case 1:
layout = R.layout.item_heading_one;
break;
case 2:
layout = R.layout.item_heading_two;
break;
}
View v = LayoutInflater.from(parent.getContext()).inflate(layout, parent, false);
ShowBookItemsViewHolder holder = new ShowBookItemsViewHolder(v);
return holder;
}
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试在使用 DataBinding 时使用此功能,但出现错误,但我不能这样做
这是我的错误代码:
@Override
public RobotViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
int layout = -1;
if (inflater == null) {
switch (viewType) {
case 0:
layout = R.layout.robot_item_action;
break;
case 1:
layout = …
Run Code Online (Sandbox Code Playgroud) 这是我的数据绑定适配器:
@BindingAdapter("taskMinutes")
public static void taskMinutes(@NonNull TextView view, @NonNull Task task) {
if (task.getDueDate() == null) {
view.setText("");
return;
}
view.setText(String.valueOf(DateUtils.getDateMinutes(task.getDueDate())));
}
Run Code Online (Sandbox Code Playgroud)
并在xml
:
app:taskMinutes="@{task}"
Run Code Online (Sandbox Code Playgroud)
分钟会EditText
正常显示,但不会添加到 中task.dueDate
。
但是如何添加适配器以将新输入从EditText
filed添加到task.dueDate
?
我有android数据绑定的xml:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable name="presenter" type="com.myapp.presentation.presenter.CreateUserPresenter"/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.design.widget.TextInputLayout
android:id="@+id/firstNameInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingTop="8dp"
android:paddingRight="16dp"
android:paddingBottom="8dp">
<android.support.design.widget.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapSentences"
android:hint="@string/first_name" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/secondNameInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingTop="8dp"
android:paddingRight="16dp"
android:paddingBottom="8dp">
<android.support.design.widget.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapSentences"
android:hint="@string/second_name" />
</android.support.design.widget.TextInputLayout>
<android.support.v7.widget.AppCompatButton
android:id="@+id/btnCreate"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="12dp"
android:text="@string/create"
android:onClick="@{(view) -> presenter.createUser()}" />
</LinearLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
和CreateUserPresenter.class
:
public class CreateUserPresenter {
public CreateUserPresenter () {}
public void createUser(String firstName, String lastName) {
}
}
Run Code Online (Sandbox Code Playgroud)
如何在单击按钮的方法中传递输入( …
当我尝试使用数据绑定和绑定布局中的自定义XML标记运行项目时,我收到下面描述的构建错误:
布局:
<data>
<variable
name="data"
type="com.melontech.sff.viewmodel.DataViewModel" />
</data>
...
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/placeholder_img"
app:imageUrl="@{data.imageUrl}" />
...
Run Code Online (Sandbox Code Playgroud)
View Model具有以下Binding适配器:
@BindingAdapter("bind:imageUrl")
public static void getImageUrl(ImageView imageView, String url) {
Timber.d("LOAD IMAGE WITH URL %s", url);
}
Run Code Online (Sandbox Code Playgroud)
创建ViewHolder并进行绑定的代码如下:
@Override
public ModelViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ModelListItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.model_list_item, parent, false);
return new ModelViewHolder(binding);
}
Run Code Online (Sandbox Code Playgroud)
构建错误:
Error:Execution failed for task ':app:transformJackWithJackForDebug'.
Run Code Online (Sandbox Code Playgroud)
com.android.jack.ir.JNodeInternalError:java.lang.Exception:java.lang.RuntimeException:failure,请参阅日志以获取详细信息.无法生成视图绑定器java.lang.IllegalArgumentException:element public default java.util.stream.IntStream codePoints()不是包含类型java.lang.String的成员,也不是com.android.jack.eclipse中的任何超类.位于android.databinding.tool.reflection.annotation的android.databinding.tool.reflection.annotation.AnnotationMethod.(AnnotationMethod.java:49)中的jdt.internal.compiler.apt.model.TypesImpl.asMemberOf(TypesImpl.java:129) .AnnotationClass.getDeclaredMethods(AnnotationClass.java:314)位于android.databinding.tool.exol.exol.MethodBaseExpr.resolveListenersAsMethodReference(MethodBaseExpr.java:71)的android.databinding.tool.reflection.ModelClass.getAbstractMethods(ModelClass.java:401)在android.databinding.tool.BindingTarget.resolveListeners(BindingTarget.java)的android.databinding.tool.Binding.resolveListeners(Binding.java:65)的android.databinding.tool.expr.FieldAccessExpr.resolveListeners(FieldAccessExpr.java:131): 164)在android.databinding.tool.LayoutBinder.(LayoutBinder.java:250)位于android.databinding.tool.DataBinder上的android.databinding.tool.DataBinder.(DataBinder.java:52)android.databinding.tool.CompilerChef.ensureDataBinder(CompilerChef.java:88) (CompilerChef.java:187)在android.databinding.annotationprocessor.ProcessExpressions.writeResourceBundle(ProcessExpressions.java:184)在android.databinding.annotationprocessor.ProcessExpressions.onHandleStep(ProcessExpressions.java:86)在android.databinding.annotationprocessor.ProcessDataBinding $ ProcessingStep.runStep(ProcessDataBinding.java:189)位于android的DB.databprocess.Arocessprocess.ProcessDataBinding $ ProcessingStep.access $ 000(ProcessDataBinding.java:174),位于com的android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:79). com.android.jack.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatc)中的android.jack.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.handleProcessor(RoundDispatcher.java:139)her.java:121)位于com.android.jack.eclipse.jdt.internal.compiler的com.android.jack.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:159). Comiler.processAnnotations(Compiler.java:909)位于com.android.jack.frontend.java.JAstBuilder.compile的com.android.jack.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:434) JAstBuilder.java:269)com.android.jack.frontend.java.JackBatchCompiler.performCompilation(JackBatchCompiler.java:219)at com.android.jack.eclipse.jdt.internal.compiler.batch.Main.compile(Main. java:1712)com.android.jack.frontend.java.JackBatchCompiler.compile(JackBatchCompiler.java:184)at …
data-binding android gradle android-custom-attributes android-databinding
为什么在 Razor 视图中使用它时会String.Trim()
引发异常,string.empty
如下所示:
console.log('@Model.Test.FirstOrDefault().Trim()');
Run Code Online (Sandbox Code Playgroud)
(列表是空的,所以我得到了string.empty
)然后:
Server Error in '/' Application.
Object reference not set to an instance of an object.
(...)'
Line 326: console.log('@Model.Test.FirstOrDefault().Trim()');
Run Code Online (Sandbox Code Playgroud) 我试图在代码中实现数据绑定功能.在build.gradle中我添加了databinding.enabled = true但是它给出错误无法解析符号启用.如何纠正?