我正在尝试创建一个计数器作为复合控件。

TallyItem.java

package com.anna.mytallykeeper;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.*;

public class TallyItem extends LinearLayout {
private Button decrementButton;
private Button incrementButton;
private TextView descriptionText;
private TextView countText;

public TallyItem(Context context) {
    super(context);

    LayoutInflater inflate = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    inflate.inflate(R.layout.tallyitem_layout, this);

    /*
    String service = Context.LAYOUT_INFLATER_SERVICE;
    LayoutInflater li = (LayoutInflater)getContext().getSystemService(service);
    li.inflate(R.layout.tallyitem_layout, this, true);
    */

    //Get the fields
    decrementButton = (Button)findViewById(R.id.decrement);
    incrementButton = (Button)findViewById(R.id.increment);
    descriptionText = (TextView)findViewById(R.id.description);
    countText = (TextView)findViewById(R.id.count);

    decrementButton.setOnClickListener(buttonListener);
    incrementButton.setOnClickListener(buttonListener);
}

public TallyItem(Context context, AttributeSet attrs) {
    super(context, attrs);
}

private OnClickListener buttonListener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        Button button = (Button)v;
        int count = Integer.parseInt(countText.getText().toString());

        if (button.getText().equals("-")) {
            count--;
        } else if (button.getText().equals("+")) {
            count++;
        }

        countText.setText("" + count);
    }
};
}


tallyitem.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<Button
    android:id="@+id/decrement"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="-"
    android:textSize="30sp"
    />
<LinearLayout
    android:orientation="vertical"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    >
        <TextView
            android:id="@+id/description"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Item 1"
            android:textSize="25sp"
            />
        <TextView
            android:id="@+id/count"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="0"
            android:textSize="60sp"
            />
</LinearLayout>
<Button
    android:id="@+id/increment"
    android:layout_width="60dp"
    android:layout_height="60dp"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="+"
    android:textSize="30sp"
    />
</LinearLayout>


main.xaml

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
<com.anna.mytallykeeper.TallyItem
    android:id="@+id/tallyItem1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
</LinearLayout>
</merge>


我不知道为什么它不会显示在main.xml中。

谢谢你的帮助。

最佳答案

您的视图需要一个传入AttributeSet的构造函数。将您的构造函数更改为:

public TallyItem(Context context, AttributeSet attr) {
    super(context, attr);
    ...
}


并摆脱与单一参数的构造函数。

08-17 21:37