java - 如何将 ListView 中的每个项目限制为一行?

标签 java android xml

在由 ArrayList 填充的 ListView 中,如何限制每个列表项的字符数或将每个列表项限制为只有一行文本?这是一个笔记应用程序。我的所有代码都在下面。

ListView :

<ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:ellipsize="end"
    android:id="@+id/listView"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:singleLine="true"/>

MainActivity.java:

public class MainActivity extends AppCompatActivity {
static ArrayList<String> note;
ListView listView;
static ArrayList<String> notes = new ArrayList<>();
static ArrayAdapter arrayAdapter;
static  Set<String> set;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);

    setTitle("Notely");
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {





            notes.add("");

            SharedPreferences sharedPreferences = getSharedPreferences("mypackage", Context.MODE_PRIVATE);

            if (set == null) {

                set = new HashSet<String>();

            } else {

                set.clear();

            }

            set.addAll(notes);
            arrayAdapter.notifyDataSetChanged();

            sharedPreferences.edit().remove("notes").apply();
            sharedPreferences.edit().putStringSet("notes", set).apply();

            Intent i = new Intent(getApplicationContext(), EditNote.class);
            i.putExtra("noteId", notes.size() - 1);
            startActivity(i);






        }
    });


    ListView listView = (ListView) findViewById(R.id.listView);

    SharedPreferences sharedPreferences = this.getSharedPreferences("mypackage", Context.MODE_PRIVATE);

    set = sharedPreferences.getStringSet("notes", null);

    notes.clear();

    if (set != null) {

        notes.addAll(set);

    } else {

        notes.add("Example note");
        set = new HashSet<String>();
        set.addAll(notes);
        sharedPreferences.edit().putStringSet("notes", set).apply();

    }


    arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, notes);

    listView.setAdapter(arrayAdapter);

    listView.setAdapter(arrayAdapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            Intent i = new Intent(getApplicationContext(), EditNote.class);
            i.putExtra("noteId", position);
            startActivity(i);


        }

    });



    listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {

            new AlertDialog.Builder(MainActivity.this)
                    .setIcon(android.R.drawable.ic_dialog_alert)
                    .setTitle("Are you sure?")
                    .setMessage("Do you want to delete this note?")
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                            notes.remove(position);

                            SharedPreferences sharedPreferences = MainActivity.this.getSharedPreferences("mypackage", Context.MODE_PRIVATE);

                            if (set == null) {

                                set = new HashSet<String>();

                            } else {

                                set.clear();

                            }

                            set.addAll(notes);
                            sharedPreferences.edit().remove("notes").apply();
                            sharedPreferences.edit().putStringSet("notes", set).apply();
                            arrayAdapter.notifyDataSetChanged();

                        }
                    })
                    .setNegativeButton("No", null)
                    .show();

            return true;
        }
    });



}





@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement


    return super.onOptionsItemSelected(item);
}
}

EditNote.java

public class EditNote extends AppCompatActivity implements TextWatcher{
int noteId;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_edit_note);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    setTitle("Write a Note");



    EditText editText = (EditText) findViewById(R.id.editText);

    Intent i = getIntent();
    noteId = i.getIntExtra("noteId", -1);

    if (noteId != -1) {

        editText.setText(MainActivity.notes.get(noteId));


    }

    editText.addTextChangedListener(this);




}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement


    return super.onOptionsItemSelected(item);
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {



    MainActivity.notes.set(noteId, String.valueOf(s));
    MainActivity.arrayAdapter.notifyDataSetChanged();

    SharedPreferences sharedPreferences = getSharedPreferences("mypackage", Context.MODE_PRIVATE);

    if (MainActivity.set == null) {

        MainActivity.set = new HashSet<String>();

    } else {

        MainActivity.set.clear();

    }


    MainActivity.set.addAll(MainActivity.notes);
    sharedPreferences.edit().remove("notes").apply();
    sharedPreferences.edit().putStringSet("notes", MainActivity.set).apply();


}


@Override
public void afterTextChanged(Editable s) {

}
}

最佳答案

您当前正在为 android.R.layout.simple_list_item_1 中的每个项目使用内置布局 ( List View ) 。听起来你想定制这个。因此,您需要使用<TextView>创建自己的布局。具有适当的属性,包括

android:maxLines="1"
android:ellipsize="end"

关于java - 如何将 ListView 中的每个项目限制为一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35370057/

相关文章:

javascript - 由于某种原因,jQuery 中的 .text() 方法不适用于 xml 元素

java - 使用maven编译器插件解析@Override注解

java - Spring 使用一个 application.properties 进行生产,另一个用于调试

java - 如何让 Java Set 每次都以相同的顺序进行迭代?

java - 如何在没有错误的情况下启动我的 Android SQLite 应用程序

android - 如何为 Android 布局文件创建可重用的 xml 包装器

java - 如何像HID键盘一样通过蓝牙广播文本?

android - 在服务内部使用 Handler

java - Android,如何将变量作为指针传递给函数?

java - ListView 每个项目都有不同的布局