【问题标题】:databinding error : databinding does not exist数据绑定错误:数据绑定不存在
【发布时间】:2018-03-27 19:20:13
【问题描述】:

我尝试使用 listview 应用程序使用 mvvm 模式。

但我在 android studio 中有错误。

我不知道为什么这个项目不起作用。

structure image

错误:

  1. Error:(18, 49) 错误:com.example.jhseo.flight_mvvm.databinding 包不存在

  2. Error:(30, 13) 错误:找不到符号类 FlightActivityBinding

  3. 错误:任务 ':app:compileDebugJavaWithJavac' 执行失败。

    java.lang.RuntimeException:发现数据绑定错误。 ****/ 数据绑定错误 ****msg:标识符必须具有来自 XML 文件的用户定义类型。 viewModel 缺少它 文件:E:\workspace_mobile\test\Flight-Mvvm\app\src\main\res\layout\flight_item.xml 地点:15:27 - 15:35 ****\数据绑定错误****

飞行活动

public class FlightActivity extends AppCompatActivity implements FlightViewModel.DataListener{
private FlightActivityBinding binding;
private FlightViewModel flightViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

binding = DataBindingUtil.setContentView(this, R.layout.flight_activity);
flightViewModel = new FlightViewModel(this, this);
binding.setViewModel(flightViewModel);

setupListVIew(binding.flightListView);

@Override
protected void onDestroy() {
super.onDestroy();
}

@Override
public void onListChanged(ArrayList<Flight> flights) {
FlightListAdapter adapter =(FlightListAdapter) binding.flightListView.getAdapter();
adapter.setFlights(flights);
adapter.notifyDataSetChanged();
}

private void setupListVIew(ListView flightListView) {
FlightListAdapter adapter = new FlightListAdapter(this);
flightListView.setAdapter(adapter);
}        
}

FlightViewModel

public class FlightViewModel {

FlightFactory flightFactory;
...
public ObservableArrayList<Flight> flightList;

private Context context;
private DataListener dataListener;
private Realm realm;

public FlightViewModel(Context context, DataListener dataListener) {
this.context = context;
this.dataListener = dataListener;
init();
loadData();
}

public void setDataListener(DataListener dataListener) { this.dataListener = dataListener; }

...

public void searchByConditionInListAndSet() {
RealmQuery<Flight> query = realm.where(Flight.class);

if (!"".equals(terminal.get())) {
query = query.equalTo("terminal", terminal.get());
}
flightList.addAll(query.findAll().subList(0, (int) query.count()));
if (dataListener != null) {
dataListener.onListChanged(flightList);
}
 ...
}
public interface DataListener {
void onListChanged(ArrayList<Flight> flights);
}
}

项目视图模型

public class ItemViewModel extends BaseObservable {
private Flight flight;
private Context context;

public ItemViewModel(Flight flight, Context context) {
this.flight = flight;
this.context = context;
}
...
public void onItemClick(View view) {
//TODO: Detail Page
 //context.startActivity();
}

public void setFlight(Flight flight) {
this.flight = flight;
notifyChange();
}
}

flight_activity.xml

flight_item.xml

<data>
        <variable
            name="itemModel"
            type="com.example.jhseo.flight_mvvm.viewModel.ItemViewModel"/>
    </data>

    <LinearLayout android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:onClick="@{viewModel::onItemClick}">

        <LinearLayout
            android:layout_width="50dp"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/timeTextView"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="@{itemModel.time}" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="100dp"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/flightStateTextView"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="@{itemModel.flightState}" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/destinationi"
            android:layout_width="80dp"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/destinationTextView"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="@{itemModel.destination}" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/counterAndGatei"
            android:layout_width="80dp"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/counterAndGateTextView"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="@{itemModel.counterAndGate}" />
        </LinearLayout>
        <LinearLayout
            android:id="@+id/origini"
            android:layout_width="70dp"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/originTextView"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="@{itemModel.origin}" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/carouseli"
            android:layout_width="40dp"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/carouselTextView"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="@{itemModel.carousel}" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/exitDoori"
            android:layout_width="70dp"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/exitDoorTextView"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="@{itemModel.exitDoor}" />
        </LinearLayout>
    </LinearLayout>
</layout>

【问题讨论】:

    标签: android mvvm data-binding


    【解决方案1】:

    你得到的错误很清楚:flight_item.xml 中没有定义标识符viewModel

    改变

    android:onClick="@{viewModel::onItemClick}"  
    

    android:onClick="@{itemModel::onItemClick}"
    

    flight_item.xml 文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 2011-02-24
      • 2017-10-18
      • 1970-01-01
      相关资源
      最近更新 更多