繁体   English   中英

我如何将减少按钮添加到我的 ListView 以减少数字?

[英]How i can add decrease button to my ListView to decrease numbers?

我想添加一个按钮来减少列表视图中的数字,我不希望数字从零减少到 go。

夜间活动:

public class NightActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_night);

        final ArrayList<Word> words = new ArrayList<>();
        words.add(new Word("Thing", "another Thing", 1)); // <--- This number I want to decrease it.
        words.add(new Word("ThingOne","another ThingOne", 3)); // <--- This number I want to decrease it.
        words.add(new Word("ThingTwo", "another ThingTwo", 3)); // <--- This number I want to decrease it.
        words.add(new Word("ThingThree", "another ThingThree", 3)); // <--- This number I want to decrease it.
        words.add(new Word("ThingFour", "another ThingFour", 1)); // <--- This number I want to decrease it.

        WordAdapter adapter = new WordAdapter(this, words);

        ListView listView = findViewById(R.id.list);
        listView.setAdapter(adapter);

    }
} 

单词:

public class Word {

    private final String name;
    private final String extraText;
    private final int repetition;

    public Word(String name, String extraText, int repetition) {
        this.name = name;
        this.extraText = extraText;
        this.repetition = repetition;
    }

    public String getName() {
        return name;
    }

    public String getExtraText() {
        return extraText;
    }

    public int getRepetition() {
        return repetition;
    }
}

字适配器:

public class WordAdapter extends ArrayAdapter<Word> {

    public WordAdapter(Activity context, ArrayList<Word> words) {
        super(context, 0, words);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View listItemView = convertView;
        if (listItemView == null) {
            listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
        }

        Word currentWord = getItem(position);

        TextView nameTextView = listItemView.findViewById(R.id.name_text);
        nameTextView.setText(currentWord.getname());

        TextView extraTextView = listItemView.findViewById(R.id.extra_text);
        extraTextView.setText(currentWord.getExtraText());

        TextView repetitions = listItemView.findViewById(R.id.number_of_repetitions);
        String formattedRepetition = formatRepetition(currentWord.getRepetition());
        repetitions.setText(formattedRepetition);

        return listItemView;
    }

    private String formatRepetition(int repetition) {
        DecimalFormat repetitionFormat = new DecimalFormat("0");
        return repetitionFormat.format(repetition);
    }
}

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/corner"
        android:padding="10dp">

        <TextView
            android:id="@+id/name_text"
            style="@style/nameText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_below="@id/extra_text"
            android:gravity="center">

            <TextView
                android:id="@+id/number_of_repetitions"
                style="@style/repetition"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                tools:text="2"
                android:textStyle="bold"/>

            <Button
                android:id="@+id/button_repetitions"
                android:layout_width="90dp"
                android:layout_height="50dp"
                android:text="button"/>

        </LinearLayout>
    </RelativeLayout>
</LinearLayout>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="13dp">

        <TextView
            android:id="@+id/morning"
            style="@style/night"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:background="@drawable/night_corner"
            android:text="@string/category_night" />

        <View
            android:id="@+id/divider"
            android:layout_width="match_parent"
            android:layout_height="13dp" />

        <TextView
            android:id="@+id/evening"
            style="@style/day"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:background="@drawable/day_corner"
            android:text="@string/category_day" />

    </LinearLayout>
</ScrollView>

我添加了一个按钮,但我不知道如何激活它,我不知道我将把onClickListener放在哪里,我是初学者所以请帮助我并感谢您阅读我的代码。

首先,要更改单词的repetition值,您必须在Word class 中创建一个repetition设置器,如下所示:

public class Word {
    .....
    ..... // your code including constructor & getters
    .....
    
    public void setRepetition(int repetition) 
    {
        this.repetition = repetition;
    }
}

现在,要更改按钮单击的repetition值,请在WordAdapter.java onClickListener如下所示:

public class WordAdapter extends ArrayAdapter<Word> {
    .....
    ..... // your code
    .....

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        .....
        ..... // your code
        .....

        listItemView.btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int current_repetition = currentWord.getRepetition();
                if (current_repetition > 0)
                    currentWord.setRepetition(current_repetition - 1)
                listItemView.textView.setText(currentWord.getRepetition())
            }
        });

        return listItemView;
    }
}

试试这个,看看它是否有效。

首先,您应该使用 recyclerview 而不是列表视图。 要减少您的数量,您必须将按钮添加到 list_item,并设置点击侦听器

我不清楚你想要什么,但据我所知,当你按下button时你想要什么,它会将重复中的数字减一。 那么我们将在wordAdaptor活动中添加一个按钮变量,我们知道,然后我们将执行setOnclickListener事件,然后我们启动进程的 rest,此代码修改后我添加了一个condition ,如果数字达到零停止

公共 class WordAdapter 扩展 ArrayAdapter {

public WordAdapter(Activity context, ArrayList<Word> words) {
    super(context, 0, words);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View listItemView = convertView;
    if (listItemView == null) {
        listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
    }

    Word currentWord = getItem(position);

    TextView nameTextView = listItemView.findViewById(R.id.name_text);
    nameTextView.setText(currentWord.getName());

    TextView extraTextView = listItemView.findViewById(R.id.extra_text);
    extraTextView.setText(currentWord.getExtraText());

    TextView repetitions = listItemView.findViewById(R.id.number_of_repetitions);
    String formattedRepetition = formatRepetition(currentWord.getRepetition());
    repetitions.setText(formattedRepetition);

    Button bRepetitions = listItemView.findViewById(R.id.button_repetitions);

    bRepetitions.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int nRepetitions;
            String mRepetitions = repetitions.getText().toString();
            nRepetitions = Integer.parseInt(mRepetitions);
            nRepetitions -= 1;
            if (nRepetitions < 0) {
                nRepetitions = 0;
                Toast.makeText(getContext(), "Can not be less than 0", Toast.LENGTH_SHORT).show();}
            repetitions.setText(String.valueOf(nRepetitions));
        }
    });
    return listItemView;
}

private String formatRepetition(int repetition) {
    DecimalFormat repetitionFormat = new DecimalFormat("0");
    return repetitionFormat.format(repetition);
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM