@DeadRayder

Как вывести информацию в нужный фрагмент?

Всем добрый день, помогите пожалуйста решить одну задачку. А именно, в ListView, который расположен во фрагменте мне нужно выводить данные, написал под свои нужды адаптер, а вот присвоить этот адаптер конкретному ListView у меня не получается. Вот тут ошибка:
ArrayAdapterItem mArrayAdapterItem = new ArrayAdapterItem(this, R.id.liiiiiiiiiiiiiiiist,productCollection);

Ругается на this, получается я передаю неправильный Context. Я туда уже что только не запихивал, не работает и все тут. Из-за этой же ошибки не работают и встроенные адаптеры. Помогите разобраться, что нужно создать, переопределить, чтобы вставить это вместо this И все заработало)
Прикреплю на всякий случай несколько классов:

package com.example.deadrayder_1.shopperguide;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;


public class HomeScreen extends FragmentActivity {

    static final String TAG = "MyLogs";
    static final int PAGE_COUNT = 3;

    ViewPager mViewPager;
    PagerAdapter mPagerAdapter;

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

        mViewPager = (ViewPager) findViewById(R.id.pager);
        mPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
        mViewPager.setAdapter(mPagerAdapter);

        mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                Log.d(TAG,"onPageSelected, position = " + position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_home_screen, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    private class MyFragmentPagerAdapter extends FragmentPagerAdapter{

        public MyFragmentPagerAdapter(FragmentManager fm){
            super(fm);

        }

        @Override
        public CharSequence getPageTitle(int position) {
            if (position == 0)
            return "Товары";
            else if (position == 1)
                return "Корзина";
            else
                return "Акции";
        }

        @Override
        public Fragment getItem(int position) {
            return HomeScreenFragment.newInstance(position);
        }

        @Override
        public int getCount() {
            return PAGE_COUNT;
        }
    }
}


package com.example.deadrayder_1.shopperguide;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;


/**
 * A placeholder fragment containing a simple view.
 */
public class HomeScreenFragment extends Fragment {


    SimpleAdapter mSimpleAdapter;
    ListView mList;

    static final String ARGUMENT_PAGE_NUMBER = "arg_page_number";

    int pageNumber;
    int backColor;

    static HomeScreenFragment newInstance(int page) {
        HomeScreenFragment homefragment = new HomeScreenFragment();
        Bundle arguments = new Bundle();
        arguments.putInt(ARGUMENT_PAGE_NUMBER, page);
        homefragment.setArguments(arguments);
        return homefragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER);

        if (pageNumber == 1){
            Random rnd = new Random();
            backColor = Color.argb(40, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
        }
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view;
        PorductItem[] productCollection = new PorductItem[2];
        productCollection[0] = new PorductItem("Wow");
        productCollection[1] = new PorductItem("Cio");

        view = inflater.inflate(R.layout.fragment,null);
        mList = (ListView) view.findViewById(R.id.liiiiiiiiiiiiiiiist);

        ArrayAdapterItem mArrayAdapterItem = new ArrayAdapterItem(, R.id.liiiiiiiiiiiiiiiist,productCollection);
     //   mList.setAdapter(mArrayAdapterItem);

        return  view;
    }
}


А вот это класс Адаптера
package com.example.deadrayder_1.shopperguide;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;


/**
 * Created by DeadRayder_1 on 17.07.2015.
 */
public class ArrayAdapterItem extends ArrayAdapter<PorductItem> {

    Context mContext;
    int layoutResourceId;
    PorductItem []data = null;

    public ArrayAdapterItem(Context p_mContext, int p_layoutResourceId, PorductItem[]p_data) {
        super(p_mContext,p_layoutResourceId,p_data);

        this.mContext = p_mContext;
        this.layoutResourceId = p_layoutResourceId;
        this.data = p_data;

    }

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

        if (convertView == null)
        {
            LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
            convertView = inflater.inflate(layoutResourceId, parent, false);
        }

        PorductItem objectItem = data[position];

        TextView mTextView = (TextView) convertView.findViewById(R.id.txt_product_name);
        mTextView.setText(objectItem.itemName);

        return convertView;
    }
}


Иии...картинка ошибки e8e8710331f1459081503f30b0f952d4.jpg
  • Вопрос задан
  • 593 просмотра
Решения вопроса 1
Ewintory
@Ewintory
Java / Android developer
Ваш адаптер первым параметром требует Context. Вам следовало бы знать что Fragment в отличии от Activity не является предком Context-а. Поэтому в адаптер можно передавать Activity, в которой находится данный фрагмент. Получить ее из фрагмента можно вот так:
getActivity();
Дальше уже сами догадаетесь

UPD: а вылетает потому что не правильно создаете адаптер. В ArrayAdapter надо передавать id текстового поля, а не понятно чего (R.id.liiiiiiiiiiiiiiiist).
Читайте гайд, возвращайтесь когда его освоите.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@DeadRayder Автор вопроса
А под fragment здесь что имеется в виду? Единственное значение, которое принимает адаптер это просто GetActivity(), программа запускается, но при создании адаптера вылетает.
ArrayAdapterItem mArrayAdapterItem = new ArrayAdapterItem(getActivity(), R.id.liiiiiiiiiiiiiiiist,productCollection);


Спасибо, прочитал статью, переделал все как надо, работает
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы