Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 90

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

13.03.2016, 01:13. Показов 1664. Ответов 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 + "");
    }
}
вот уже везде все излазил, не могу понять что не так!
помогите плиз!!!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.03.2016, 01:13
Ответы с готовыми решениями:

Как передать имя файла из блока и открыть
Привет всем, программа ищет файл на жестком по имени, потом выводит имена файлов и пути к ним, если файлов много, так вот вопрос: как...

Как передать через intent нажатие кнопки в другом активити
В первом активити у нас есть две кнопки 1 и 2. Во втором активити ещё две кнопки 3 и 4. Вопрос в том, как сделать так, чтоб при нажатии...

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

12
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
13.03.2016, 01:47
А откуда запускается твой фрагмент?
0
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 90
13.03.2016, 14:43  [ТС]
я немного не понял вопрос?

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

Добавлено через 1 час 12 минут
что, никто подсказать в чем ошибка не может?
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
13.03.2016, 15:12
А разве фрагменты придумали не для того, чтобы не делать несколько активити?
0
59 / 48 / 13
Регистрация: 03.09.2013
Сообщений: 474
13.03.2016, 16:08
Bundle.
0
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 90
13.03.2016, 17:17  [ТС]
Возможно, но только я пока не во всем разбираюсь
0
59 / 48 / 13
Регистрация: 03.09.2013
Сообщений: 474
13.03.2016, 17:41
http://stackoverflow.com/quest... r-fragment
1
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 90
14.03.2016, 09:21  [ТС]
DemD10, а через интент в моем случае никак?
мне надо чтобы при нажатии пунката прибор-1 открылся файл прибор-1.PDF в классе PDFViewActivity. тоесть в этом фрагменте я должен присвоить String ABOUT_FILE = значение прибор-1.PDF,соответственно при нажатии другого пунката, ему присваивались другие значение
0
59 / 48 / 13
Регистрация: 03.09.2013
Сообщений: 474
14.03.2016, 10:00
Пробуйте интентом, в интернете полно инфы)) http://stackoverflow.com/quest... on-android
0
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 90
15.03.2016, 19:35  [ТС]
Спасибо ребята, с передачей разобрался, все очень помогли.

Добавлено через 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 и как я догадываюсь нужно вернуть значение из метода. но как это сделать не могу понять.
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
15.03.2016, 22:01
Дааа. Такой сумбур поискать еще. Объявляем 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. Шикарная логика.
0
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 90
16.03.2016, 21:35  [ТС]
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, я бы еще долго додумывался как все осуществить.
0
 Аватар для OlegJV
104 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 474
16.03.2016, 23:20
Это просто жуть. FragmentTransaction в фрагменте?

Слушай, если есть желание, напиши мне на почту oleg.j.v@gmail.com. Так получилось, что у меня сейчас много свободного времени, может смогу чем помочь. Давай побережем нервы остальных форумчан.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.03.2016, 23:20
Помогаю со студенческими работами здесь

Открытие файла в C# - как правильно указать путь к файлу, чтобы на другом компьютере не надо было его менять?
Здравствуйте! Подскажите пожалуйста как правильно указать путь к файлу что бы на другом компьютере не надо было его менять.... Он...

Передать имя загруженного файла и использовать его
Доброго времени суток, уважаемые форумчане! if(is_uploaded_file($_FILES)) { move_uploaded_file($_FILES, &quot; /путь...

Как передать ссылку на элемент активити в другой класс чтобы провести операции надо ним
Такая задача сложилась. есть активити MainActivity: public class MainActivity extends Main {...} в нем есть элемент LinearLayout -...

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

Задание : ввести имя файла с клавиатуры и если есть то открыть его
Задание такое вести полное имя файла с клавиатуры и если он существует, то открыть его, переименовать и переместить...помогите пожалуйста...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru