Nano Hash - криптовалюты, майнинг, программирование

Как получить позицию группы в расширяемом списке из группового ключа?

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

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

Чего я не знаю. После отправки намерения запустить новое действие представления списка я получаю введенные мной дополнительные данные, представляющие собой строку, являющуюся ключом элемента в списке. hashmap/текст в родительском представлении, который я хочу расширить. Как мне получить позицию группы, которую я хочу расширить, из ключа группы? (чтобы я мог в конечном итоге вызвать прокрутку и расширить методы для этого объекта)

Метод в моем доступном для поиска действии, который запускает новое действие:

private void doSearch(Cursor query) {
        // get a Cursor, prepare the ListAdapter
        // and set it
        Cursor c = query;
        startManagingCursor(c);


        String[] from = new String[] {"QUANTITY", "_id"};
        int[] to = new int[] {android.R.id.text1};
        SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, c, from, to);
        mListView.setAdapter(cursorAdapter);
        Log.e("doSearch method:", "has been called");

        mListView.setOnItemClickListener(
                new AdapterView.OnItemClickListener() {
                    public void onItemClick(AdapterView<?> parent, View view,
                                            int position, long id) {
                        // When clicked, log with the TextView text

                        Log.e("doSearch method:", "Answer: " + ((TextView) view).getText());

                        if(cMap.containsKey(((TextView) view).getText())){
                            Intent i=new Intent(getApplicationContext(),CommonConstants.class);
                            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            i.putExtra("key", ((TextView) view).getText());
                            getApplicationContext().startActivity(i);

                        } else if (chMap.containsKey(((TextView) view).getText())){
                            Intent i=new Intent(getApplicationContext(),PhysicoChemicalConstants.class);
                            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            i.putExtra("key", ((TextView) view).getText());
                            getApplicationContext().startActivity(i);

                        } else if (aMap.containsKey(((TextView) view).getText())){
                            Intent i=new Intent(getApplicationContext(),AtomicNuclearConstants.class);
                            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            i.putExtra("key", ((TextView) view).getText());
                            getApplicationContext().startActivity(i);

                        }
                        else if (eMap.containsKey(((TextView) view).getText())){
                            Intent i=new Intent(getApplicationContext(),ElectromagneticConstants.class);
                            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            i.putExtra("key", ((TextView) view).getText());
                            getApplicationContext().startActivity(i);

                        }
                        else{
                            Log.e("doSearch method:", "not any map ");
                        }


                    }
                });
    }

Новое действие просмотра списка, которое запускается предыдущим методом:

public class PhysicoChemicalConstants extends SearchViewActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_physico_chemical_constants);

        MyDataProvider dp = new MyDataProvider(this);

        ExpandableListView view;
        view = (ExpandableListView) findViewById(R.id.expandableList);
        HashMap constantsHashMap;
        constantsHashMap = dp.getChemMap();
        ArrayList constantsHashMapKeys = new ArrayList<String>(constantsHashMap.keySet());

        MyCustomAdapter adapter = new MyCustomAdapter(this, constantsHashMap, constantsHashMapKeys);
        view.setAdapter(adapter);

        Intent intent = getIntent();
        String mKey = intent.getStringExtra("key");




//creates toolbar
        Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(myToolbar);
    }



}

Большое спасибо за любую помощь!


Ответы:


1

Хорошо, после долгих размышлений я придумал способ сделать это, хотя я не уверен, что он самый элегантный.

После того, как я отправил намерение открыть расширяемыйListView (с ключом выбранного элемента, включенным в дополнительные данные), я получил дополнительные данные, а затем создал список всех ключей HashMap, используемых для заполнения списка. Я просмотрел список массивов с помощью простого цикла for, а затем вернул позицию, когда нашел совпадение, что позволило мне легко вызывать методы smoothScrollToPosition() и expandGroup(). Мой класс ExpandableListView ниже, я надеюсь, что кто-то может извлечь из этого пользу.

public class CommonConstants extends SearchViewActivity {
    View view;
    String searchedCon;
    MyDataProvider dp;
    HashMap constantsHashMap;
    ArrayList constantsHashMapKeys;


    //finds view and hashmap, passes to adapter to display
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_common_constants);

        dp = new MyDataProvider(this);
        ExpandableListView view;
        view = (ExpandableListView) findViewById(R.id.expandableList);

        constantsHashMap = dp.getCommonMap();
        constantsHashMapKeys = new ArrayList<String>(constantsHashMap.keySet());

        MyCustomAdapter adapter = new MyCustomAdapter(this, constantsHashMap, constantsHashMapKeys);
        view.setAdapter(adapter);

        int pos;
        Intent intent = getIntent();
        searchedCon = intent.getStringExtra("key");
        if(searchedCon != null){
            pos = handleIntent(intent);
            view.smoothScrollToPosition(pos);
            view.expandGroup(pos);

        }






//creates toolbar
        Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(myToolbar);

    }

    private int handleIntent(Intent intent) {

        searchedCon = intent.getStringExtra("key");
        boolean exist = false;
        int i;

        for( i  = 0; i<constantsHashMapKeys.size();i++){
            if (constantsHashMapKeys.get(i).equals(searchedCon)) {
                exist = true;
                break;
            }
        }
        if(exist){
            return i;
        }else{
            return 0;
        }
    }



}
15.07.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..