Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
hossen
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 40
#1

Как с ListFragment передать имя файла чтобы открыть его в другом Активити? - Android

13.03.2016, 01:13. Просмотров 512. Ответов 12
Метки нет (Все метки)

Всем привет, я новичек! ломаю голову над такой задачей:
Есть ListFragment со списком "приборов" мне надо при нажатии на нужный прибор открыть PDF файл из ASSETS в другом активити. Как окрывать PDF файл я разобрался и при жестком введении нужного файла он открывается, а мне нужно чтоб разные файлы окрывались в этом активити. Вот мои наработки:

ListFragment:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.example.hosse.systemsaps.proizvoditeli;
 
import android.annotation.TargetApi;
import android.app.ListFragment;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
import com.example.hosse.systemsaps.PDFViewActivity;
 
import static android.R.layout.simple_list_item_1;
 
 
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class Bolod extends ListFragment {
 
    public static final String ABOUT_FILE = "about_file"; // ключ для передачи в другую активность
 
 
    private String[] myControllers = new String[] {"прибор-1", "прибор-2", "прибор-3"};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        ArrayAdapter<String> myPAdapter = new ArrayAdapter<String>(getActivity(), simple_list_item_1, myControllers);
 
        setListAdapter(myPAdapter);
    }
 
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
 
 
        Intent intent = new Intent(getActivity(), PDFViewActivity.class);
 
        if(position == 0){
            intent.putExtra("прибор-1.pdf", ABOUT_FILE);
            startActivity(intent);
        }else
        if(position == 1){
            intent.putExtra("прибор-2.pdf", ABOUT_FILE);
            startActivity(intent);
 
        }
 
    }
}
PDFViewActivity:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.example.hosse.systemsaps;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
 
import com.joanzapata.pdfview.PDFView;
import com.joanzapata.pdfview.listener.OnPageChangeListener;
 
public class PDFViewActivity extends AppCompatActivity implements OnPageChangeListener {
 
    String ABOUT_FILE = getIntent().getStringExtra("about_file");
 
    PDFView pdfView;
 
    String pdfName = ABOUT_FILE;
 
    Integer pageNumber = 1;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pdftest);
 
 
        pdfView = (PDFView) findViewById(R.id.pdfView);
        display(pdfName, false);
    }
 
    private void display(String assetFileName, boolean jumpToFirstPage) {
        if (jumpToFirstPage)
            pageNumber = 1;
        setTitle(pdfName = assetFileName);
 
        pdfView.fromAsset(assetFileName).defaultPage(pageNumber)
                .onPageChange(this).load();
    }
 
    @Override
    public void onPageChanged(int page, int pageCount) {
        pageNumber = page;
        setTitle(pdfName = pageNumber + "");
    }
}
вот уже везде все излазил, не могу понять что не так!
помогите плиз!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2016, 01:13     Как с ListFragment передать имя файла чтобы открыть его в другом Активити?
Посмотрите здесь:

Android Как передать ссылку на элемент активити в другой класс чтобы провести операции надо ним
Открыть второй активити Android
Android Выбор файла и переключение на другую активити для его открытия
Как передать целочисленную переменную и картинку из сервиса в активити? Android
Android Как сделать, чтобы данные, введенные в EditText, сохранялись и пополнялись в новом активити?
Как передать через intent нажатие кнопки в другом активити Android
Как из одного активити строку передать в другую в виде listView Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
13.03.2016, 01:47     Как с ListFragment передать имя файла чтобы открыть его в другом Активити? #2
А откуда запускается твой фрагмент?
hossen
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 40
13.03.2016, 14:43  [ТС]     Как с ListFragment передать имя файла чтобы открыть его в другом Активити? #3
я немного не понял вопрос?

Добавлено через 3 часа 22 минуты
если нужна пред история то этот фрагмент запускается через другой фрагмент способом fTrans.replace(R.id.container, bolod); а тот в свою очередь запускается из мэйнактивити.

Добавлено через 1 час 12 минут
что, никто подсказать в чем ошибка не может?
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
13.03.2016, 15:12     Как с ListFragment передать имя файла чтобы открыть его в другом Активити? #4
А разве фрагменты придумали не для того, чтобы не делать несколько активити?
DemD10
58 / 47 / 12
Регистрация: 03.09.2013
Сообщений: 433
13.03.2016, 16:08     Как с ListFragment передать имя файла чтобы открыть его в другом Активити? #5
Bundle.
hossen
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 40
13.03.2016, 17:17  [ТС]     Как с ListFragment передать имя файла чтобы открыть его в другом Активити? #6
Возможно, но только я пока не во всем разбираюсь
DemD10
58 / 47 / 12
Регистрация: 03.09.2013
Сообщений: 433
13.03.2016, 17:41     Как с ListFragment передать имя файла чтобы открыть его в другом Активити? #7
http://stackoverflow.com/questions/7...other-fragment
hossen
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 40
14.03.2016, 09:21  [ТС]     Как с ListFragment передать имя файла чтобы открыть его в другом Активити? #8
DemD10, а через интент в моем случае никак?
мне надо чтобы при нажатии пунката прибор-1 открылся файл прибор-1.PDF в классе PDFViewActivity. тоесть в этом фрагменте я должен присвоить String ABOUT_FILE = значение прибор-1.PDF,соответственно при нажатии другого пунката, ему присваивались другие значение
DemD10
58 / 47 / 12
Регистрация: 03.09.2013
Сообщений: 433
14.03.2016, 10:00     Как с ListFragment передать имя файла чтобы открыть его в другом Активити? #9
Пробуйте интентом, в интернете полно инфы)) http://stackoverflow.com/questions/4...ent-on-android
hossen
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 40
15.03.2016, 19:35  [ТС]     Как с ListFragment передать имя файла чтобы открыть его в другом Активити? #10
Спасибо ребята, с передачей разобрался, все очень помогли.

Добавлено через 5 часов 42 минуты
Все таки у темы будет продолжение: данные передаются и принимаются в классе PDFViewActivity это видно с помощью Toast.makeText(this, value, Toast.LENGTH_LONG).show(); , но дальше процесс так и не идет.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class PDFViewActivity extends AppCompatActivity implements OnPageChangeListener {
 
    String value;
 
    PDFView pdfView;
 
    String pdfName = value;
 
    Integer pageNumber = 1;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pdftest);
 
 
        pdfView = (PDFView) findViewById(R.id.pdfView);
        display(pdfName, false);
 
        Bundle bundle = getIntent().getExtras();
        if (bundle != null) {
 
            value = bundle.getString("sample_name");
        }
 
        Toast.makeText(this, value, Toast.LENGTH_LONG).show();
    }
 
    private void display(String assetFileName, boolean jumpToFirstPage) {
        if (jumpToFirstPage)
            pageNumber = 1;
        setTitle(pdfName = assetFileName);
 
        pdfView.fromAsset(assetFileName).defaultPage(pageNumber)
                .onPageChange(this).load();
    }
 
    @Override
    public void onPageChanged(int page, int pageCount) {
        pageNumber = page;
        setTitle(pdfName = pageNumber + "");
    }
}
Если в начальном значении переменных String pdfName = value; в место value вставить ожидаемое значение "прибор-1.pdf" то файл шикарно открывается. Как я понял что значение value = bundle.getString("sample_name"); не присваивается pdfName так как он не виден из метода onCreate и как я догадываюсь нужно вернуть значение из метода. но как это сделать не могу понять.
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
15.03.2016, 22:01     Как с ListFragment передать имя файла чтобы открыть его в другом Активити? #11
Дааа. Такой сумбур поискать еще. Объявляем String value. Оно, естественно, равно null.
Потом пишем String pdfName = value; pdfName тоже становится null. Хотя с тем же успехом можно было написать просто String pdfName; Все равно null.
Потом пишем value = bundle.getString("sample_name"); И value становится равно некоему sample_name.
Спрашивается в задачнике: чему при этом равно pdfName?

Добавлено через 8 минут
Напиши по человечески, откуда вызывается фрагмент, куда он что передает и как запускается вторая активити. Лично я бы присобачил фрагменту интерфейс, первой активити соответствующий листенер, в нем бы получал из фрагмента имя файла и передавал его в bundle.

Добавлено через 1 минуту
А еще лучше вместо второй активити сделал бы второй фрагмент.

Добавлено через 9 минут
Ну а если не хочешь писать, следим за ручками:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class PDFViewActivity extends AppCompatActivity implements OnPageChangeListener {
 
    PDFView pdfView;
    Integer pageNumber = 1;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pdftest);
 
 
        pdfView = (PDFView) findViewById(R.id.pdfView);
         
        Bundle bundle = getIntent().getExtras();
        if (bundle != null) {
            display(bundle.getString("sample_name"), false);
        }
        Toast.makeText(this, value, Toast.LENGTH_LONG).show();
    }
 
    private void display(String assetFileName, boolean jumpToFirstPage) {
            if (jumpToFirstPage) pageNumber = 1;
            setTitle(assetFileName);
            pdfView.fromAsset(assetFileName).defaultPage(pageNumber).onPageChange(this).load();
    }
 
    @Override
    public void onPageChanged(int page, int pageCount) {
        pageNumber = page;
        setTitle(pdfName = pageNumber + "");
    }
}
Добавлено через 9 минут
if (jumpToFirstPage) pageNumber = 1;


Очень интересная строчка, хоть и не относится к теме топика. pageNumber был объявлен как 1.
То есть если jumpToFirstPage = false, мы с ним ничего не делаем, и он так и остается равным 1.
А если jumpToFirstPage = true, то мы присваиваем pageNumber значение 1. Шикарная логика.
hossen
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 40
16.03.2016, 21:35  [ТС]     Как с ListFragment передать имя файла чтобы открыть его в другом Активити? #12
OlegJV, я использую как основное активити шаблон Navigation Drawer Activity, далее с помощью конструкции
Java
1
2
if (id == R.id.nav_aps) {
            fTrans.replace(R.id.container, fragmentAps);
вызываю второй фрагмент который является лист-фрагмент активити FragmentAps.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import android.annotation.TargetApi;
import android.app.FragmentTransaction;
import android.app.ListFragment;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
import com.example.hosse.systemsaps.PolozenieAps;
import com.example.hosse.systemsaps.R;
 
import static android.R.layout.simple_list_item_1;
 
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class FragmentAps extends ListFragment {
 
    private String[] myAps = { "Общее положение", "Производители", "Нормы и правила"};
 
    FragmentApsP fragmentApsP = new FragmentApsP();
 
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        ArrayAdapter<String> myApsAdapter = new ArrayAdapter<String>(getActivity(), simple_list_item_1, myAps);
        setListAdapter(myApsAdapter);
    }
 
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
 
        FragmentTransaction fTrans = getFragmentManager().beginTransaction();
 
        if(position == 0){
            startActivity(new Intent(getActivity(), PolozenieAps.class));
        }else if(position == 1){
            fTrans.replace(R.id.container, fragmentApsP);
        }fTrans.commit();
    }
}
с него я уже вызываю еще один лист фрагмент, через который вызываю еще один лист фрагмент тот самый что в этой теме выше.

Смысл получается такой что с главного активити я попадаю в список, в этом списке выбираю нужную позицию и перехожу в следущий список с производителями, выбрав производителя, выбираю список оборудования этого производителя и мне как раз надо открыть файл PDF с инструкцией.

Добавлено через 3 минуты
Возможно все это можно сделать проще, но я пока учусь))
Спасибо что помог с кодом открытия фалов pdf, я бы еще долго додумывался как все осуществить.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2016, 23:20     Как с ListFragment передать имя файла чтобы открыть его в другом Активити?
Еще ссылки по теме:

Android Возможно ли создание одного активити в другом?
Как открыть PUSH в активити? Android
Скрыть ActionBar() на другом активити Android
Передать данные в активити Android
Android Как узнать имя Активити?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
16.03.2016, 23:20     Как с ListFragment передать имя файла чтобы открыть его в другом Активити? #13
Это просто жуть. FragmentTransaction в фрагменте?

Слушай, если есть желание, напиши мне на почту oleg.j.v@gmail.com. Так получилось, что у меня сейчас много свободного времени, может смогу чем помочь. Давай побережем нервы остальных форумчан.
Yandex
Объявления
16.03.2016, 23:20     Как с ListFragment передать имя файла чтобы открыть его в другом Активити?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru