Listview z własnym adapterem

Listview z własnym adapterem
Prim0
  • Rejestracja:prawie 19 lat
  • Ostatnio:ponad 9 lat
0

Witam
Poszukuje rozwiązanie następującego problemu.
Mam własny adapter klasa dziedzicząca po BaseAdapter a w niej min. EditText i ImageView
odpaliłem Textwatcher a dane z edittextów chciał bym odpierać w głównej activity.
Niestety NullPointerException - wszystkie dane są pełne jeśli taki sam TexWatcher odpalę z głównej klasy a nie z klasy BaseAdapter to wszystko śmiga
klasa adapter listy

Kopiuj
 


import android.content.Context;
import android.graphics.Bitmap;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageView;


public class List_new extends BaseAdapter {


    private Context mctx;
    private String[] wla;
    private Bitmap[] bmps;
    private Bitmap[] bmpC;

    public List_new (Context ctx, String[] wlac, Bitmap[] bmp, Bitmap[] Cbmp) {
        super();
        this.wla=wlac;
        this.mctx = ctx;
        this.bmps = bmp;
        this.bmpC = Cbmp;

    }

    public int getCount() {
        return bmps.length;
    }

    public Object getItem(int position) {
        return position;
    }

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

    private class ViewHolderPattern {
        ImageView img_w_layoucie;
        ImageView img_2;
        EditText edit_w_layoucie;
        List_new list_new;
    }

    public View getView(final int position, View convertView, final ViewGroup parent) {


        ViewHolderPattern view_holder;



          if (convertView == null) {

              LayoutInflater inflater = (LayoutInflater) mctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
              convertView = inflater.inflate(R.layout.activity_list_new, parent, false);

              view_holder = new ViewHolderPattern();
              view_holder.img_w_layoucie = (ImageView) convertView.findViewById(R.id.imageView1);
              view_holder.img_w_layoucie.setTag(view_holder.list_new);
              view_holder.img_2 = (ImageView) convertView.findViewById(R.id.imageView);
              view_holder.img_2.setTag(view_holder.list_new);
              view_holder.edit_w_layoucie = (EditText) convertView.findViewById(R.id.editText);
              view_holder.edit_w_layoucie.setTag(view_holder.list_new);
             // view_holder.list_new = wla.get(position);

              view_holder.edit_w_layoucie.addTextChangedListener(new TextWatcher() {
                  @Override
                      public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3)
                      {
                      }

                  @Override
                  public void onTextChanged(CharSequence charSequence, int i, int i2, int i3)
                  {

                  }

                  @Override
                  public void afterTextChanged(Editable editable) {

                      if(editable.toString().length()==4)
                      {
                      
                          Galeria gal= new Galeria();
                          gal.Call_list(editable.toString(),position);}
                      Log.v("clasa","str " + editable.toString() + " position " + position);
                   
                  }
              });
              convertView.setTag(view_holder);

    } else {
               view_holder = (ViewHolderPattern) convertView.getTag();
    }



        view_holder.edit_w_layoucie.setText(wla[position]);
        view_holder.img_w_layoucie.setImageBitmap(bmps[position]);
        view_holder.img_2.setImageBitmap(bmpC[position]);
        return convertView;
      //  return ch;
    }


}

główna activity

Kopiuj
 

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.EditText;
import android.content.SharedPreferences;
import android.widget.ListView;
import java.util.ArrayList;
import java.io.File;


public class Galeria extends Activity {

    String IP;
    SharedPreferences.Editor editor ;
     boolean[] wl = new boolean[8];
     int[] bmID = new int[8];
    Bitmap[] bitmapki = new Bitmap[8];
    Bitmap[] bitmapTRUE = new Bitmap[8];
    public Bitmap[] bitmapC = new Bitmap[8];
    String[] Ceny = new String[8];
    ListView lista ;
    private File[] czerwone;
    private File[] zielone;
    private File[] zolte;
    private File CzerwoneS = new File( "/mnt/sdcard/external_sdcard/Images/32x16S/Czerwony/");
    private File ZieloneS = new File("/mnt/sdcard/external_sdcard/Images/32x16S/Zielone/");
    private File ZolteS = new File("/mnt/sdcard/external_sdcard/Images/32x16S/Zolte/");
    public ArrayList<Bitmap> a=new ArrayList<Bitmap>();
    Bitmap[] CzerwoneB = new Bitmap[20];
    Bitmap[] ZieloneB = new Bitmap[12];
    Bitmap[] ZolteB = new Bitmap[12];
    EditText testowy;
    public Galeria(){}
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_galeria);
        SharedPreferences prefs = this.getSharedPreferences("pl.xx.www.pyldroid", Context.MODE_PRIVATE);

        lista = (ListView) findViewById(R.id.listView);
        testowy = (EditText) findViewById(R.id.editText2);

        testowy.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3)
            {
            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i2, int i3)
            {

            }

            @Override
            public void afterTextChanged(Editable editable) {

                if(editable.toString().length()==4)
                {
                    //   addExpenseModel.setAmount(editable.toString());

                    Call_list(editable.toString(), 2);}

                //  notifyDataSetChanged();

            }});
//-------------------------------odczyt danych
        editor = prefs.edit();
        IP=(prefs.getString("IP_A", "192.168.1.199"));
      //  jasnosc=(prefs.getInt("Bri", 0));
        // int size = prefs.getInt(wl + "_size", 0);
        int index =0;
        for(int i=0;i<8;i++){
            wl[i] = prefs.getBoolean("wl_" + i, true);
            bmID[i]=prefs.getInt("bm_" + i, i);
            bitmapki[i] = BitmapFactory.decodeResource(getResources(), bmID[i]);
            if (wl[i]==true) {
                bitmapTRUE[index] = bitmapki[i];
                index++;
            }}
        String[] Ceny = new String[index];
        Bitmap[] bitmapTRUE = new Bitmap[index];
        index=0;
            for(int i=0;i<8;i++) {
                if (wl[i] == true) {
                    bitmapTRUE[index] = bitmapki[i];
                    index++;
                }
            }
        //--------------------------zaladowanie obrazkow
        czerwone = CzerwoneS.listFiles();
        zielone = ZieloneS.listFiles();
        zolte = ZolteS.listFiles();
        for(int i=0;i<czerwone.length;i++)
        {
            CzerwoneB[i] = BitmapFactory.decodeFile(czerwone[i].getAbsolutePath());
        }

        a.add(CzerwoneB[10]);
        a.add(CzerwoneB[10]);
        a.add(CzerwoneB[11]);
        a.add(CzerwoneB[10]);
        index=0;
        Call_list("65.3", 2);
        for(int i=0;i<8;i++) {
            if (wl[i] == true) {
                bitmapC[index] = combineImageIntoOne(a);
                index++;
            }
        }
//--------------------------lista
        List_new adapter_listy = new List_new(this ,Ceny, bitmapTRUE, bitmapC);
        lista.setAdapter(adapter_listy);

    }
    
    public void Call_list(String wart,int poz)
    {   a.clear();
        Character  ch1 = wart.charAt(0);
        Character  ch2 = wart.charAt(1);
        Character  ch3 = wart.charAt(2);
        Character  ch4 = wart.charAt(3);
        if (ch1 == '.') { a.add(CzerwoneB[11]);}
        else {a.add(CzerwoneB[  Character.getNumericValue(ch1)]);}
        if (ch2 == '.') { a.add(CzerwoneB[11]);}
        else {a.add(CzerwoneB[  Character.getNumericValue(ch2)]);}
        if (ch3 == '.') { a.add(CzerwoneB[11]);}
        else {a.add(CzerwoneB[ Character.getNumericValue(ch3)]);}
        if (ch4 == '.') { a.add(CzerwoneB[11]);}
        else {a.add(CzerwoneB[  Character.getNumericValue(ch4)]);}
        Log.v("odebrane",wart + " "+poz+"  "+ ch4 );

       bitmapC[poz] = combineImageIntoOne(a);
        List_new adapter_listy = new List_new(this ,Ceny, bitmapTRUE, bitmapC);
        lista.setAdapter(adapter_listy);
        combineImageIntoOne(a);
    }
    //---------------------scalanie obrazkow
    public Bitmap combineImageIntoOne(ArrayList<Bitmap> bitmap) {
        int w=32,  h = 16;
        int right = 0;
        Log.v("ilosc bmp "," " +bitmap.size());
        Bitmap temp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(temp);
        if(bitmap.size() == 4)
        for (int i = 0; i < bitmap.size(); i++) {
            canvas.drawBitmap(bitmap.get(i), right,  0f, null);
            if (bitmap.get(i).getWidth()>5)
                right += bitmap.get(i).getWidth()+1;
            else
                right += bitmap.get(i).getWidth();
           Log.v("dl bmp ", " " + bitmap.get(i).getWidth());
        }
        return temp;
    }
    
}

Prawdopodobnie problemy są 2
1 nie zlokalizowałem / ale dane odebrane z TextWatchera z poza głównej klasy nie pozwalają nic robić w głównej. a może to wina definicji głównej klasy zawarta w tej od adaptera ?
2 możliwe że sypie się dlatego że odbieram dane z adaptera listy i na ich podstawie wstawiam nowy adapter / ale nie znam dokładnej przyczyny ?

edytowany 3x, ostatnio: Prim0
panryz
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 2 godziny
1

No ale jak jest crash to jest LogCat. Pokaż która linijka i co mówi. A nie że może jest NPE

Prim0
  • Rejestracja:prawie 19 lat
  • Ostatnio:ponad 9 lat
0

Wskazuje na linijki gdzie przelatują dane między klasami i składanie obrazków
z tym że te dane nie są null ! sprawdzę to jeszcze raz

Kopiuj
 05-05 21:34:53.061  11995-11995/pl.xtronic.www.pylondroid E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at android.graphics.Canvas.throwIfRecycled(Canvas.java:1025)
            at android.graphics.Canvas.drawBitmap(Canvas.java:1065)
            at pl.xtronic.www.pylondroid.Galeria.combineImageIntoOne(Galeria.java:159)
            at pl.xtronic.www.pylondroid.Galeria.Call_list(Galeria.java:145)
            at pl.xtronic.www.pylondroid.List_new$1.afterTextChanged(List_new.java:93)
            at android.widget.TextView.sendAfterTextChanged(TextView.java:7095)
            at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:8743)
            at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:970)
            at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:497)
            at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435)
            at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30)
            at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:121)
            at android.widget.TextView.doKeyDown(TextView.java:5240)
            at android.widget.TextView.onKeyDown(TextView.java:5059)
            at android.view.KeyEvent.dispatch(KeyEvent.java:2609)
            at android.view.View.dispatchKeyEvent(View.java:7086)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358)
            at android.widget.ListView.dispatchKeyEvent(ListView.java:2026)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358)
            at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1358)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1892)
            at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1369)
            at android.app.Activity.dispatchKeyEvent(Activity.java:2356)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1819)
            at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3575)
            at android.view.ViewRootImpl.deliverKeyEvent(ViewRootImpl.java:3531)
            at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3113)
            at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4153)
            at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4132)
            at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2930)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4745)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)

a jednak CzerwoneB null - teraz tylko dojść why?

edytowany 2x, ostatnio: Prim0
Prim0
  • Rejestracja:prawie 19 lat
  • Ostatnio:ponad 9 lat
0

Czy wywołując jakąś metodę z poziomu innej klasy w ten sposób

Kopiuj
ActivityMain _main = new ActivityMain ()
_main.metoda() 

zmienne wypełniane w onCreate klasy main pozostają puste ?

edytowany 2x, ostatnio: Prim0
bolson
  • Rejestracja:około 15 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Zielona Góra/Poznań
0
Prim0 napisał(a):

Czy wywołując jakąś metodę z poziomu innej klasy w ten sposób

Kopiuj
ActivityMain _main = new ActivityMain ()
_main.metoda() 

zmienne wypełniane w onCreate klasy main pozostają puste ?

No raczej, tworzeniem aktywności i zarządzaniem ich cyklem życia zajmuje się system..

0

W takim razie jak odbierać stringi z takiego Edit box gdzieś z "wewnętrznej" klasy czy przekazywanie jakiegoś parametru parent rozwiąże problem ?

wojciechmaciejewski
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 lata
  • Postów:560
0

albo przekaż String przy tworzeniu tej klasy, albo jakiś interfejs, albo do Bundla....

Prim0
  • Rejestracja:prawie 19 lat
  • Ostatnio:ponad 9 lat
0

Racja przekazać by się dało bo position łapię
problem tylko w tym że zdarzenie wywołujące jest w TextWatcher po stronie klasy podrzędnej bo chodzi o tekst wpisany w EditText
kombinuje jak by tego TextWatchera do głównej activity przenieść tylko nie mogę EditTexta namierzyć
testowy2= (EditText)lista.getChildAt(wantedChild).findViewById(R.id.editText); NULL

a najlepsze jest to

Kopiuj
List_new adapter_listy = new List_new(this ,Ceny, bitmapTRUE, bitmapC);
        lista.setAdapter(adapter_listy); 

i lista.getChildCount() = 0 WTF

edytowany 6x, ostatnio: Prim0
wojciechmaciejewski
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 lata
  • Postów:560
2

ło boziu.

Weź najpierw poczytaj o konwencji nazw w Java, później trochę o clean code , i bierz się wtedy za robienie List View

Generalnie to nie bardzo wiem co chcesz zrobić bo przekopanie się przez Twój kod to jakieś mission impossible.

Napisz dokładnie co chcesz osiągnąć.

Bo rozumiem że chcesz napisać tak żeby TextWatcher zwracał Ci jakieś wartości do Activity jak coś tam się wpisze w dany EditText tak? ( juz sam pomysł wrzucania EditText do ListView dziwny ale co tam)

to robisz tak

W adapterze tworzysz interfejs np.

Kopiuj
public interface OnTextChange{

void onTextChanged(int position,String text);
}

i robisz tak żeby Twoje activity implementowało ten interface

Następnie w konstruktorze Adaptera robisz takie cudo:

Kopiuj
private OnTextChange textChangeListener;
 public List_new (Context ctx, String[] wlac, Bitmap[] bmp, Bitmap[] Cbmp) {
        super();
        this.wla=wlac;
        this.mctx = ctx;
        this.bmps = bmp;
        this.bmpC = Cbmp;
        this.textChangeListener=(OnTextChange)ctx;
 }

i dodajesz do swojego TextWatchera

Kopiuj
@Override
            public void afterTextChanged(Editable editable) {
 
                if(editable.toString().length()==4)
                {
                    //   addExpenseModel.setAmount(editable.toString());
                    textChangeListener.onTextChanged(position,editable.toString());
                    Call_list(editable.toString(), 2);}

nie mam pojęcia co robi Twój kod i boje się zapytać ale w ten sposób będziesz miał wyciągnięte do Activity zarówno tekst jak i numer pola z którego został wywołany TextWatcher.

pzdr
Wojtek

Prim0
  • Rejestracja:prawie 19 lat
  • Ostatnio:ponad 9 lat
0

Dzięki
już objaśniam
adapter ma 2 ImageView i 1 edittext
po wklepaniu tekstu dostaje z listy tekst i nr adaptera na podstawie tekstu generuję bitmapke i podmieniam jedną z 2 w adapterze o tym samym numerze

|BMPNAZWA| |EDITTEXT| |BMPTEXT|

po wklepaniu 4 cyferek buduje BMPTEXT i umieszczam pod tą samą pozycją z której dostałem stringa

Dlaczego EditTex na listView ... ilość pozycji jest zmienna może ich być 1 lub 2 albo 100 a ListView pozwala na eleganckie dynamiczne tworzenie tablic komponentów

edytowany 2x, ostatnio: Prim0
wojciechmaciejewski
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 lata
  • Postów:560
0

to po co w ogóle to chcesz robić w activity?
zrób to w listenerze i tyle

Prim0
  • Rejestracja:prawie 19 lat
  • Ostatnio:ponad 9 lat
0

Wybacz nie dokończyłem.
obok listy jest button. - jak już wszystko jest jak należy aktivity generują plik binarny z bitmapek - > z pliku kilka ramek i pozyła je po udp do innego urządzenia

wojciechmaciejewski
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 lata
  • Postów:560
0

No ale to Activity ma dostęp do wszystkiego bo naciśnięciu buttona . a to co się ma dziać w środku to co to ją obchodzi.

Z activity masz dostęp do adaptera, który z kolei ma dostęp do Edit textów itp.

Nie wiem gdzie masz problem ciągle.

a jezeli chodzi o Twoje wyjaśnienie dotyczące edit text na list view no to właśnie kto Ci będzie do 100 pól coś wpisywał?

Prim0
  • Rejestracja:prawie 19 lat
  • Ostatnio:ponad 9 lat
0

a jezeli chodzi o Twoje wyjaśnienie dotyczące edit text na list view no to właśnie kto Ci będzie do 100 pól coś wpisywał?

niestety znam takiego ...

0

Rozumiem że troszkę było namieszane ale to tylko przez wielokrotne eksperymenty ...

Jeszcze tylko jedno pytanko .

TextWatcher zostawić w adapterze w getView() czy próbować łapać id od EditText z activity?

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)