Как ограничить количество символов, отображаемых в пользовательском представлении списка Android, которое используется в нескольких действиях?

#java #android #android-studio

#java #Android #android-studio

Вопрос:

Я извлекаю данные из базы данных SQLite и добавляю их в свой пользовательский listview, который используется в нескольких действиях.

На первом экране, который видит пользователь, отображается полный заголовок и его полное описание, но я хочу ограничить количество символов, отображаемых в заголовке [или только в одной строке] и описании [или максимум в двух строках].

Я знаю, что если бы я просто использовал это пользовательское представление списка только один раз, я мог бы сделать что-то вроде простого отображения подстроки заголовка или описания. Но проблема в том, что я использую это представление списка в нескольких местах, и я не хочу видеть такое поведение в других действиях. Вместо этого для этого действия я хочу получить полный заголовок и описание при нажатии на этот конкретный элемент списка, и я уже сделал это.

Вот мой адаптер customListView :

 public class MyCustomNotesAdapter extends BaseAdapter {

Context context;
ArrayList<Note> noteList;

public MyCustomNotesAdapter(Context context, ArrayList<Note> noteList) {
    this.context = context;
    this.noteList = noteList;
}

@Override
public int getCount() {
    return this.noteList.size();
}

@Override
public Object getItem(int position) {
    return noteList.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View view, ViewGroup viewGroup) {

       //inflate our custom listview
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.custom_notes_listview, null);

        TextView title_text =  view.findViewById(R.id.note_title);
        TextView desc_text =    view.findViewById(R.id.note_desc);


        //Button update_btn =  view.findViewById(R.id.update_note_button);

        Note note = noteList.get(position);

        
        title_text.setText(note.getTitle()); //note.getTitle().substring(beginIndex, endIndex) doesn't work for my case.
        desc_text.setText(note.getDescription());
       return view;
}
}
  

И действие, в котором я использую это :

  .................. other codes ......        
     //display notes of the logged in user
     listView = findViewById(R.id.listView);
     myNotesDatabaseHelper = new MyNotesDatabaseHelper(AllNotesScreenActivity.this);
     final List<Note> allNotes = 
               myNotesDatabaseHelper.getAllNotes(myNotesDatabaseHelper.getIdFromUsername(username));

    if (allNotes.size() <= 0)
        Toast.makeText(this, "You have no notes , please create note.", Toast.LENGTH_SHORT).show();
    //array adapter
    myCustomNotesAdapter = new MyCustomNotesAdapter(AllNotesScreenActivity.this, (ArrayList<Note>) allNotes);
    listView.setAdapter(myCustomNotesAdapter);

    //handle delete on long click listener
    listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
            //logic  to delete item
            final Note clickedNote = (Note) adapterView.getItemAtPosition(i);

            //alert dialog for deleting your note on tapping
            AlertDialog.Builder deleteNoteAlertDialog = new AlertDialog.Builder(
                    AllNotesScreenActivity.this);

            //initializng  alert dialog
            alertDialog = new Alert("Delete Note !", "Do you want to delete this note permanently ? [ can't be undo ]");

            // Setting Dialog Title
            deleteNoteAlertDialog.setTitle(alertDialog.getAlertTitle());

            // Setting Dialog Message
            deleteNoteAlertDialog.setMessage(alertDialog.getAlertMessage());

            // Setting Icon to Dialog
             deleteNoteAlertDialog.setIcon(R.drawable.delete);

            // Setting Positive "Yes" Btn
            deleteNoteAlertDialog.setPositiveButton("YES",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            boolean success = myNotesDatabaseHelper.deleteOneNote(clickedNote);
                            if (!success) {
                                Toast.makeText(AllNotesScreenActivity.this, "Couldn't be deleted your note. ", Toast.LENGTH_SHORT).show();
                                return;
                            }
                            Toast.makeText(AllNotesScreenActivity.this, "Note Deleted Successfully ", Toast.LENGTH_LONG).show();
                            Intent intent = new Intent(getApplicationContext(), AllNotesScreenActivity.class);
                            intent.putExtra("username", username);
                            startActivity(intent);
                        }
                    });

            // Setting Negative "NO" Btn
            deleteNoteAlertDialog.setNegativeButton("NO",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
            // Showing Alert Dialog
            deleteNoteAlertDialog.show();

            return true;
        }
    });
  

Я искал его, но не смог найти. Любая помощь приветствуется.

Ответ №1:

Код Kotlin:

 textView.ellipsize = TextUtils.TruncateAt.END
textView.maxLines = 2 // or = 1
  

Java-код:

 textView.setEllipsize(TextUtils.TruncateAt.END);
textView.setMaxLines(2); // or setMaxLines(1)
  

Комментарии:

1. Я думаю, вы плохо прочитали мой вопрос. Я сказал, что использую свое пользовательское представление списка в нескольких местах. Как я могу применить этот код для изменения только одного представления списка, а не всего? Укажите, есть ли у вас решение для этого. Потому что установка этого кода в моем CustomListAdpater отражается в каждом моем представлении списка, которое мне не нужно.