Fragment

Интерфейс, диалоги, темы, стили, меню
Ответить
Just_Man
Сообщения: 9
Зарегистрирован: 13 июл 2015, 16:02

Fragment

Сообщение Just_Man » 13 июл 2015, 16:11

Очень понравился ваш канал! Я в android новичок. Но с помощью канала вдохновился на создание приложения :D . Делаю простенькую прогу и столкнулся с проблемой. Делаю редактор текста, а точней блокнот. Работаю с Fragment. Есть код на блокнот, но он не подходит для Fragment.

Вот главное Activity:

Код: Выделить всё


import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

import com.sample.drawer.NoteEdit;
import com.sample.drawer.NotesDbAdapter;
import com.sample.drawer.R;


public class Fragment4 extends Fragment {



    private static final int ACTIVITY_CREATE=0;
    private static final int ACTIVITY_EDIT=1;

    private static final int DELETE_ID = Menu.FIRST;
    private int mNoteNumber = 1;

    private NotesDbAdapter mDbHelper;





    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.notelist, container, false);

        mDbHelper = new NotesDbAdapter (this.getActivity());
        mDbHelper.open();
        fillData();
        registerForContextMenu(getListView());
        Button addnote = (Button) getView().findViewById(R.id.addnotebutton);
        addnote.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                createNote();
            }
        });
    }

    private void createNote() {
        Intent i = new Intent(this.getActivity(), NoteEdit.class);
        startActivityForResult(i, ACTIVITY_CREATE);
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onLionListItemClick(l, v, position, id);
        Intent i = new Intent(this.getActivity(), NoteEdit.class);
        i.putExtra(NotesDbAdapter.KEY_ROWID, id);
        startActivityForResult(i, ACTIVITY_EDIT);
    }

    private void fillData() {
        // Get all of the notes from the database and create the item list
        Cursor notesCursor = mDbHelper.fetchAllNotes();
        getActivity().startManagingCursor(notesCursor);


        String[] from = new String[] { NotesDbAdapter.KEY_TITLE ,NotesDbAdapter.KEY_DATE};
        int[] to = new int[] { R.id.text1 ,R.id.date_row};

        // Now create an array adapter and set it to display using our row
        SimpleCursorAdapter notes =
                new SimpleCursorAdapter(this.getActivity(), R.layout.notes_row, notesCursor, from, to);
        setListAdapter(notes);
    }



    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.add(0, DELETE_ID, 0, R.string.menu_delete);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch(item.getItemId()) {
            case DELETE_ID:
                AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
                mDbHelper.deleteNote(info.id);
                fillData();
                return true;
        }
        return super.onContextItemSelected(item);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
        fillData();
    }



}

С некоторыми строчками кода разобрался, но все же остались другие. Ошибка выходит в:

super.onLionListItemClick(l, v, position, id);

setListAdapter(notes);

registerForContextMenu(getListView());

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent)

Как тут быть?

Dark67
Сообщения: 72
Зарегистрирован: 23 июл 2012, 23:11

Re: Fragment

Сообщение Dark67 » 13 июл 2015, 16:27

onActivityResult(int requestCode, int resultCode, Intent intent) у фрагмента public

И у фрагмента нет ListView. Попробуй использовать ListFragment

Just_Man
Сообщения: 9
Зарегистрирован: 13 июл 2015, 16:02

Re: Fragment

Сообщение Just_Man » 13 июл 2015, 17:15

Dark67 писал(а):onActivityResult(int requestCode, int resultCode, Intent intent) у фрагмента public

И у фрагмента нет ListView. Попробуй использовать ListFragment
ого, спасиб! Посмотрел ваш урок ListFragment. И все получилось =). По крайней мере почти. Выходит ошибка в:

mDbHelper = new NotesDbAdapter (this.getActivity());

Волнистой линией обведена.


А так же в :

super.onActivityResult(int requestCode, int resultCode, Intent Intent);

int подсвечивает тоже красным линией. Спасибо что отвечаете!

p.s. и если это важно, то я как в уроке сделал id listView:

android:id="@id/android:list"

Just_Man
Сообщения: 9
Зарегистрирован: 13 июл 2015, 16:02

Re: Fragment

Сообщение Just_Man » 14 июл 2015, 14:06

Dark67 писал(а):onActivityResult(int requestCode, int resultCode, Intent intent) у фрагмента public

И у фрагмента нет ListView. Попробуй использовать ListFragment

Здравствуйте! Полазил по форуму и по вашим урокам, но таки не нашел ответа на мой вопрос =( . Очень хочется его решить. Не могли бы если вам не сложно помочь мне пожалуйста?

Dark67
Сообщения: 72
Зарегистрирован: 23 июл 2012, 23:11

Re: Fragment

Сообщение Dark67 » 14 июл 2015, 15:50

android:id="@android/id:list"

остальное - снова код опубликуйте и описание ошибок (хорошо бы то, что пишет IDE)

Just_Man
Сообщения: 9
Зарегистрирован: 13 июл 2015, 16:02

Re: Fragment

Сообщение Just_Man » 14 июл 2015, 16:21

Dark67 писал(а):android:id="@android/id:list"

остальное - снова код опубликуйте и описание ошибок (хорошо бы то, что пишет IDE)

Код: Выделить всё

import android.app.ListFragment;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

import com.sample.drawer.NoteEdit;
import com.sample.drawer.NotesDbAdapter;
import com.sample.drawer.R;


public class Fragment4 extends ListFragment {



    private static final int ACTIVITY_CREATE=0;
    private static final int ACTIVITY_EDIT=1;

    private static final int DELETE_ID = Menu.FIRST;
    private int mNoteNumber = 1;

    private NotesDbAdapter mDbHelper;





    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.notelist, container, false);

        mDbHelper = new NotesDbAdapter (this.getActivity());
        mDbHelper.open();
        fillData();
        registerForContextMenu(getListView());
        Button addnote = (Button) getView().findViewById(R.id.addnotebutton);
        addnote.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                createNote();
            }
        });
    }

    private void createNote() {
        Intent i = new Intent(this.getActivity(), NoteEdit.class);
        startActivityForResult(i, ACTIVITY_CREATE);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onActivityResult(int requestCode,  int resultCode, Intent Intent);
        Intent i = new Intent(this.getActivity(), NoteEdit.class);
        i.putExtra(NotesDbAdapter.KEY_ROWID, id);
        startActivityForResult(i, ACTIVITY_EDIT);
    }

    private void fillData() {
        // Get all of the notes from the database and create the item list
        Cursor notesCursor = mDbHelper.fetchAllNotes();
        getActivity().startManagingCursor(notesCursor);


        String[] from = new String[] { NotesDbAdapter.KEY_TITLE ,NotesDbAdapter.KEY_DATE};
        int[] to = new int[] { R.id.text1 ,R.id.date_row};

        // Now create an array adapter and set it to display using our row
        SimpleCursorAdapter notes =
                new SimpleCursorAdapter(this.getActivity(), R.layout.notes_row, notesCursor, from, to);
        setListAdapter(notes);
    }



    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.add(0, DELETE_ID, 0, R.string.menu_delete);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch(item.getItemId()) {
            case DELETE_ID:
                AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
                mDbHelper.deleteNote(info.id);
                fillData();
                return true;
        }
        return super.onContextItemSelected(item);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
        fillData();
    }



}
подчеркивает волнистой красной линией:

mDbHelper = new NotesDbAdapter (this.getActivity());

А тут только значение "int":

super.onActivityResult(int requestCode, int resultCode, Intent Intent);

Dark67
Сообщения: 72
Зарегистрирован: 23 июл 2012, 23:11

Re: Fragment

Сообщение Dark67 » 14 июл 2015, 17:04

mDbHelper = new NotesDbAdapter (this.getActivity()); Здесь, возможно, не может создать объект (есть ли соответствующий конструктор?)

super.onActivityResult(int requestCode, int resultCode, Intent Intent); Эта строчка вообще не нужна. Ты сам обрабатываешь результат.

Почему не написал, что пишет IDE? Иначе приходится гадать, что там у тебя стряслось.

Just_Man
Сообщения: 9
Зарегистрирован: 13 июл 2015, 16:02

Re: Fragment

Сообщение Just_Man » 14 июл 2015, 19:20

Dark67 писал(а):mDbHelper = new NotesDbAdapter (this.getActivity()); Здесь, возможно, не может создать объект (есть ли соответствующий конструктор?)

super.onActivityResult(int requestCode, int resultCode, Intent Intent); Эта строчка вообще не нужна. Ты сам обрабатываешь результат.

Почему не написал, что пишет IDE? Иначе приходится гадать, что там у тебя стряслось.
  • Information:Gradle tasks [:app:assembleDebug]
    :app:preBuild UP-TO-DATE
    :app:preDebugBuild UP-TO-DATE
    :app:compileDebugNdk UP-TO-DATE
    :app:checkDebugManifest
    :app:preReleaseBuild UP-TO-DATE
    :app:prepareComAndroidSupportAppcompatV72210Library UP-TO-DATE
    :app:prepareComAndroidSupportSupportV42210Library UP-TO-DATE
    :app:prepareComMikepenzIconicsLibrary091Library UP-TO-DATE
    :app:prepareComMikepenzMaterialdrawerLibrary292Library UP-TO-DATE
    :app:prepareDebugDependencies
    :app:compileDebugAidl UP-TO-DATE
    :app:compileDebugRenderscript UP-TO-DATE
    :app:generateDebugBuildConfig UP-TO-DATE
    :app:generateDebugAssets UP-TO-DATE
    :app:mergeDebugAssets UP-TO-DATE
    :app:generateDebugResValues UP-TO-DATE
    :app:generateDebugResources UP-TO-DATE
    :app:mergeDebugResources UP-TO-DATE
    :app:processDebugManifest UP-TO-DATE
    :app:processDebugResources UP-TO-DATE
    :app:generateDebugSources UP-TO-DATE
    :app:compileDebugJava
    F:\Adventure Time\Mr.Bmo\MaterialDrawerFragmentSample-master\app\src\main\java\com\sample\drawer\fragments\Fragment4.java
    Error:(43, 9) error: unreachable statement
    Error:(54, 5) error: missing return statement
    Note: Some input files use or override a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    Error:Execution failed for task ':app:compileDebugJava'.
    > Compilation failed; see the compiler error output for details.
    Information:BUILD FAILED
    Information:Total time: 41.261 secs
    Information:3 errors
    Information:0 warnings
    Information:See complete output in console
Я гуглил что такое ide) Но не нашел, скорей всего вы просили это.

Dark67
Сообщения: 72
Зарегистрирован: 23 июл 2012, 23:11

Re: Fragment

Сообщение Dark67 » 14 июл 2015, 19:39

IDE - это среда разработки. Ты пользуешься какой: Eclipse, IntelliJ, AndroidStudio?

Just_Man
Сообщения: 9
Зарегистрирован: 13 июл 2015, 16:02

Re: Fragment

Сообщение Just_Man » 14 июл 2015, 20:44

Dark67 писал(а):IDE - это среда разработки. Ты пользуешься какой: Eclipse, IntelliJ, AndroidStudio?
Ahahaha) теперь все понятно =) Как в ваших уроках пользуюсь Android Studio

Just_Man
Сообщения: 9
Зарегистрирован: 13 июл 2015, 16:02

Re: Fragment

Сообщение Just_Man » 15 июл 2015, 15:22

Dark67 писал(а):IDE - это среда разработки. Ты пользуешься какой: Eclipse, IntelliJ, AndroidStudio?
Все что предлагало подставить Android studio я подставил. Но не получается, испробовал все возможные варианты которые знаю. В чем же тут ошибка?

Just_Man
Сообщения: 9
Зарегистрирован: 13 июл 2015, 16:02

Re: Fragment

Сообщение Just_Man » 16 июл 2015, 07:21

Dark67 писал(а):IDE - это среда разработки. Ты пользуешься какой: Eclipse, IntelliJ, AndroidStudio?

Код: Выделить всё

import android.app.ListFragment;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

import com.sample.drawer.NoteEdit;
import com.sample.drawer.NotesDbAdapter;
import com.sample.drawer.R;


public class Fragment4 extends ListFragment {



    private static final int ACTIVITY_CREATE=0;
    private static final int ACTIVITY_EDIT=1;

    private static final int DELETE_ID = Menu.FIRST;
    private int mNoteNumber = 1;

    private NotesDbAdapter mDbHelper;





    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.notelist, container, false);

        mDbHelper = new NotesDbAdapter(this.getActivity());
        mDbHelper.open();
        fillData();
        registerForContextMenu(getListView());
        Button addnote = (Button) getView().findViewById(R.id.addnotebutton);
        addnote.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                createNote();
            }
        });
    }

    private void createNote() {
        Intent i = new Intent(this.getActivity(), NoteEdit.class);
        startActivityForResult(i, ACTIVITY_CREATE);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {

        Intent i = new Intent(this.getActivity(), NoteEdit.class);
        i.putExtra(NotesDbAdapter.KEY_ROWID, id);
        startActivityForResult(i, ACTIVITY_EDIT);
    }

    private void fillData() {
        // Get all of the notes from the database and create the item list
        Cursor notesCursor = mDbHelper.fetchAllNotes();
        getActivity().startManagingCursor(notesCursor);


        String[] from = new String[] { NotesDbAdapter.KEY_TITLE ,NotesDbAdapter.KEY_DATE};
        int[] to = new int[] { R.id.text1 ,R.id.date_row};

        // Now create an array adapter and set it to display using our row
        SimpleCursorAdapter notes =
                new SimpleCursorAdapter(this.getActivity(), R.layout.notes_row, notesCursor, from, to);
        setListAdapter(notes);
    }



    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
                                    ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.add(0, DELETE_ID, 0, R.string.menu_delete);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch(item.getItemId()) {
            case DELETE_ID:
                AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
                mDbHelper.deleteNote(info.id);
                fillData();
                return true;
        }
        return super.onContextItemSelected(item);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
        fillData();
    }



}

Выходит ошибка в:

mDbHelper = new NotesDbAdapter(this.getActivity());

В чем тут проблема?

Dark67
Сообщения: 72
Зарегистрирован: 23 июл 2012, 23:11

Re: Fragment

Сообщение Dark67 » 16 июл 2015, 08:01

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

Duck duck = new Duck(); // Почему среда выдает ошибку?

Just_Man
Сообщения: 9
Зарегистрирован: 13 июл 2015, 16:02

Re: Fragment

Сообщение Just_Man » 16 июл 2015, 08:35

Dark67 писал(а):Откуда я знаю в чем здесь ошибка? Я предположил выше, но ты, наверное, не глянул, посчитав это не важным. Весь твой код я не видел, какие ошибки выдает IDE не знаю.

Duck duck = new Duck(); // Почему среда выдает ошибку?
Извините что достал вас) Я новичок и походу очень навязчивый :D Ваш совет я учел "Здесь, возможно, не может создать объект (есть ли соответствующий конструктор?)" но я просто не понимаю о чем вы, так как еще не набрался опыта. Я гуглил "что пришел или выдает android studio", но не нашел( Как посмотреть что выдает IDE? еще раз извините

Ответить