Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
1

ListView и кастомный адаптер

19.11.2013, 13:01. Показов 3473. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день ув. Программисты!

Нашёл код который заполняет ListView с кастомным адаптером. Но вот проблема ListView создаётся программно(

Вот код:
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import android.content.Context;
import android.graphics.Typeface;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
 
class CustomAdapterView extends LinearLayout {        
    public CustomAdapterView(Context context, Device device) 
    {
        super( context );       
        
        setId(device.getDeviceID());
            
        
        setOrientation(LinearLayout.HORIZONTAL);
        setPadding(0, 6, 0, 6);
        
        
        LinearLayout.LayoutParams Params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        Params.setMargins(6, 0, 6, 0);
    
        ImageView ivLogo = new ImageView(context);
        
        if (device.getDeviceType() == 0)
 
            ivLogo.setImageDrawable(context.getResources().getDrawable(R.drawable.off));
        else if (device.getDeviceType() == 1)
 
            ivLogo.setImageDrawable(context.getResources().getDrawable(R.drawable.on));
        
        addView(ivLogo, Params);
        
        
        Params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
        LinearLayout PanelV = new LinearLayout(context);
        PanelV.setOrientation(LinearLayout.VERTICAL);
        PanelV.setGravity(Gravity.BOTTOM);
        
        TextView textName = new TextView( context );
        textName.setTextSize(16);
        textName.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
        textName.setText( device.getDeviceName());
        PanelV.addView(textName);       
        
        TextView textAddress = new TextView( context );
        textAddress.setTextSize(16);
        textAddress.setText( device.getDeviceAddress());
        PanelV.addView(textAddress);    
        
        addView(PanelV, Params);
    }
}
 
 
public class CustomAdapter extends BaseAdapter{
    
      
        private int mPosition;
        OnItemClickListener(int position){
                mPosition = position;
        }
        public void onClick(View arg0) {
                Log.v("ddd", "onItemClick at position" + mPosition);                      
        }               
    
 
    public static final String LOG_TAG = "BI::CA";
    private Context context;
    private List<Device> deviceList;
 
    public CustomAdapter(Context context, List<Device> deviceList ) { 
        this.context = context;
        this.deviceList = deviceList;
    }
 
    public int getCount() {                        
        return deviceList.size();
    }
 
    public Object getItem(int position) {     
        return deviceList.get(position);
    }
 
    public long getItemId(int position) {  
        return position;
    }
 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
        Device device = deviceList.get(position);
        View v = new CustomAdapterView(this.context, device );
        
  
        return v;
    }
 
 
}


Вопрос: Есть four.xml в нём listView как добавить в него данные, а не создавать программно?

Примечание: Так как у меня несколько экранов а не 1. на каждый экран у меня по xml`у. И нужно именно в определённый xml заполнить ListView

Код добавления:



Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        final Context context = MainActivity.this;
        ListView ls2 = new ListView(context);
        ls2.setAdapter(null);
 
...
 
 for(int i=0; i<fileData.length; i++)
            {
                String[] fileData2 = fileData[i].split(";");
                int dev;
                dev=Integer.parseInt(fileData2[2]);
 
                device = new Device(fileData2[0],fileData2[1], dev%2,0, 100 + i);
                m_Devices.add(device);              
            }
 
CustomAdapter lvAdapter =  new CustomAdapter(context, m_Devices);
        ls2.setAdapter(lvAdapter);        
 
        setContentView(ls2);
    }
Спасибо за ранее.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2013, 13:01
Ответы с готовыми решениями:

Кастомный адаптер listView
Доброго времени суток, в общем впервые столкнулся с задачей создания кастомного адаптера для...

Не работает кастомный адаптер
Делаю программу с собственным адаптером для ListView. Компилятор ни на что не ругается, но...

Несколько string массивов в кастомный адаптер
Есть ListView с кастомным адаптером в отдельном классе. Нашел код на просторах как передавать в...

Кастомный listview в виде плиток
Доброго времени суток! Возник вопрос: возможно ли сделать listview (recycleview) в виде плиток,...

19
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
19.11.2013, 13:18 2
какая разница как создается список? вот у меня есть список
Java
1
private ListView products;
вот я придумал для него адаптер
Java
1
2
private class ProductsAdapter extends BaseAdapter {
...}
вот я его создал и присвоил списку
Java
1
2
ProductsAdapter adapter = new ProductsAdapter(this);
products.setAdapter(adapter);
1
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
19.11.2013, 14:06  [ТС] 3
Цитата Сообщение от vxg Посмотреть сообщение
какая разница как создается список?
Окей. а как его прописать на четвертый экран four.xml ??
0
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
19.11.2013, 14:36 4
очевидно что в xml должно быть что то вроде
XML
1
2
3
4
5
6
7
    <ListView
        android:id="@+id/cartProducts"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"" >
    </ListView>
Добавлено через 1 минуту
а в onCreate вашего экрана что то вроде
Java
1
products = (ListView)findViewById(R.id.cartProducts);
1
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
19.11.2013, 15:40  [ТС] 5
Цитата Сообщение от vxg Посмотреть сообщение
...
Пробовал все что было очевидным и не очевидным. Итог один: приложение вываливается с ошибкой. (

Добавлено через 18 минут
Вот весь код MainActivity взгляните пожалуйста свежим взглядом:

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ListView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
 
public class MainActivity extends FragmentActivity {
    WebView mWebView;
    private static final String TAG = "MyApp";
 
    Device device;
    ArrayList<Device> m_Devices = new ArrayList<Device>();
    //=================
    
    /** идентификатор первого фрагмента. */
    public static final int FRAGMENT_ONE = 0;
    /** идентификатор третего. */
    public static final int FRAGMENT_THREE = 2;
    /** идентификатор второго. */
    public static final int FRAGMENT_TWO = 1;
    /** количество фрагментов. */
    public static final int FRAGMENTS = 3;
    /** адаптер фрагментов. */
    private FragmentPagerAdapter _fragmentPagerAdapter;
    /** список фрагментов для отображения. */
    private final List<Fragment> _fragments = new ArrayList<Fragment>();
    /** сам ViewPager который будет все это отображать. */
    private ViewPager _viewPager;
 
    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // создаем фрагменты.
        _fragments.add(FRAGMENT_ONE, new FirstFragment());
        _fragments.add(FRAGMENT_TWO, new SecondFragment());
        _fragments.add(FRAGMENT_THREE, new ThirdFragment());
        // Настройка фрагментов, определяющих количество фрагментов, экраны и название.
        _fragmentPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
 
            @Override
            public int getCount() {
 
                return FRAGMENTS;
            }
 
            @Override
            public Fragment getItem(final int position) {
 
                return _fragments.get(position);
            }
 
            @Override
            public CharSequence getPageTitle(final int position) {
 
                switch (position) {
                    case FRAGMENT_ONE:
                        return "Title One";
                    case FRAGMENT_TWO:
                        return "Title Two";
                    case FRAGMENT_THREE:
                        return "Title three";
                    default:
                        return null;
                }
            }
        };
        _viewPager = (ViewPager) findViewById(R.id.pager);
        _viewPager.setAdapter(_fragmentPagerAdapter);
        _viewPager.setCurrentItem(0);
 
        //=================
        final Context context = MainActivity.this;
        ListView ls2 = new ListView(context);
        // находим список
        //ListView ls2 = (ListView) findViewById(R.id.listView);
        ls2.setAdapter(null);
        //=================
 
//===========ТАЙМЕР==================================
        new CountDownTimer(2000, 1000) {
            public void onTick(long millisUntilFinished) {
                //mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
            }
            public void onFinish() {
                _viewPager.setCurrentItem(1);
                mWebView = (WebView) findViewById(R.id.webview);
                //==================WEB_Browser==================================
                // включаем поддержку JavaScript
                mWebView.getSettings().setJavaScriptEnabled(true);
                // указываем страницу загрузки
                mWebView.setWebViewClient(new HelloWebViewClient());
                mWebView.loadUrl("http://mysite.com/i.php");
                //==============END_WEB_BROWSER==================================
            }
        }.start();
//===========END_ТАЙМЕР==========
 
        new MyTask().execute();
        CustomAdapter lvAdapter =  new CustomAdapter(context, m_Devices);
        ls2.setAdapter(lvAdapter);
        setContentView(ls2);
    }
 
    private class HelloWebViewClient extends WebViewClient
    {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url)
        {
            view.loadUrl(url);
            return true;
        }
    }
 
     public class MyTask extends AsyncTask<String, Void, String> {
         @Override
        protected String doInBackground(String... stri) {
            // ПАРСИМ
            String Str;
            String url = "http://mysite.com/arr.txt";
            StringBuilder sb = null;
            try {
                URL myurl = new URL(url);
                BufferedReader br = new BufferedReader(new InputStreamReader(myurl.openStream()));
                sb = new StringBuilder(100);
                while ((Str = br.readLine()) !=null) {
                    sb.append(Str+"\n");
                }
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // РАЗБИВАЕМ НА ВХОЖДЕНИЕ
            String input = sb.toString();
            String[] fileData = input.split("\n");
 
            for(int i=0; i<fileData.length; i++)
            {
                String[] fileData2 = fileData[i].split(";");
                int dev;
                dev=Integer.parseInt(fileData2[2]);
                device = new Device(fileData2[0],fileData2[1], dev%2,0, 100 + i);
                m_Devices.add(device);
                //Log.d(TAG, "ПЕРВОЕ ВХОЖДЕНИЕ: " + fileData2[0] + " ВТОРОЕ ВХОЖДЕНИЕ: " + fileData2[1] + " ТРЕТЬЕ ВХОЖДЕНИЕ: " + fileData2[2]);
            }
            return sb.toString();
        }
     }
}
Список показывает а затем когда заканчивается таймер он выкидывает приложение. как я успел заметить после создания списка мои слайд окна пропадают. и остаётся только одно окно. по этому после таймера когда вызывается _viewPager.setCurrentItem(1); он и выкидывает.

Добавлено через 40 минут
Подскажите что я делаю не так?
0
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
19.11.2013, 15:41 6
не совсем понятно как это он
Цитата Сообщение от cezer_ak Посмотреть сообщение
Список показывает
и при этом
Цитата Сообщение от cezer_ak Посмотреть сообщение
как я успел заметить после создания списка мои слайд окна пропадают. и остаётся только одно окно.
0
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
19.11.2013, 15:44  [ТС] 7
Цитата Сообщение от vxg Посмотреть сообщение
не совсем понятно как это он

и при этом
Программа парсит текст, затем расщипляет на вхождение в каждой строки, показывает весь список, а затем программа с ошибкой вырубается. (((
0
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
19.11.2013, 15:47 8
то есть список корректно отображается, но падает? запустите в пошаговом режиме и посмотрите почему это происходит и тип ошибки
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
19.11.2013, 15:55 9
как то странно вы делаете .. Вам нужно что бы во фрагменте отобразился список? В этом случаи внутри к примеру этого класса FirstFragment() и назначайте его, вы получается сначала делаете слой с ViewPager
Java
1
setContentView(R.layout.main);
а потом переустанавливаете в это же активити новый,
Java
1
setContentView(ls2);
после чего как таймер заканчивает свою работы, вы пытаетесь обратиться к первому, но его уже нет там и подавно
Java
1
_viewPager.setCurrentItem(1);
Делайте следующим образом.
1. Во fragmentactivity делаете viewpager;
2. В дочерних элементах (FirstFragment, SecondFragment, ThirdFragment) в методе onCreateView .. назначаете нужные слои.
0
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
19.11.2013, 15:55  [ТС] 10
Цитата Сообщение от vxg Посмотреть сообщение
то есть список корректно отображается, но падает? запустите в пошаговом режиме и посмотрите почему это происходит и тип ошибки
да список загружает но сайдг экрана пропадает. Подскажите как запустить по шагово в андроид студио я только 4й день((
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
19.11.2013, 15:59 11
Вот рабочий код, тут используется в качестве родительского окна со слайдингом фрагмент, вы просто вместо метода oncreateview переделайте под метод активности oncreate.

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
public class Themes extends Fragment {
 
    
    MainPage data;
    static final String TITLES[] = {"Подразделы", "Закрепленные темы", "Темы"};
    Fragment[] fragments = new Fragment[3];
    MyPagerAdapter mAdapter;
    
    ViewPager mViewPager;
    PagerSlidingTabStrip mTitles;
    
    
    public static Themes newInstance(MainPage mp) {
        Themes fragment = new Themes();
        fragment.setParams(mp);
        return fragment;
    }
    
    private void setParams(MainPage mp) {
        this.data = mp;
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        
        View _result = inflater.inflate(R.layout.themes, null);
        
        mTitles = (PagerSlidingTabStrip) _result.findViewById(R.id.titles);
        mViewPager = (ViewPager) _result.findViewById(R.id.pager);
        
        if(mAdapter == null) {
            mAdapter = new MyPagerAdapter(getChildFragmentManager());
        } else {
            mAdapter.notifyDataSetChanged();
        }
 
        mViewPager.setAdapter(mAdapter);
        mTitles.setViewPager(mViewPager);
        
        return _result;
    }
 
    
    
    
    
    
    
    private class MyPagerAdapter extends FragmentPagerAdapter {
 
        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
        }
 
        @Override
        public Fragment getItem(int position) {
            if(fragments[position] != null) {
                return fragments[position];
            }
            
            
            switch(position) {
            case 0:
                fragments[position] = Sections.newInstance(data);
                break;
            default:
                fragments[position] = new Test();
            }
            
            
            return fragments[position];
        }
 
        @Override
        public int getCount() {
            return TITLES.length;
        }
 
        @Override
        public CharSequence getPageTitle(int position) {
            return TITLES[position];
        }
        
    }
    
    
    @SuppressLint("ValidFragment")
    private class Test extends Fragment {
 
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            
            TextView tv = new TextView(getActivity());
            tv.setText("TESSSST");
            
            
            return tv;
        }
        
    }
    
}
1
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
19.11.2013, 16:52  [ТС] 12
Цитата Сообщение от NiRamz Посмотреть сообщение
как то странно вы делаете .. Вам нужно что бы во фрагменте отобразился список? В этом случаи внутри к примеру этого класса FirstFragment() и назначайте его, вы получается сначала делаете слой с ViewPager
Java
1
setContentView(R.layout.main);
а потом переустанавливаете в это же активити новый,
Java
1
setContentView(ls2);
после чего как таймер заканчивает свою работы, вы пытаетесь обратиться к первому, но его уже нет там и подавно
Java
1
_viewPager.setCurrentItem(1);
Делайте следующим образом.
1. Во fragmentactivity делаете viewpager;
2. В дочерних элементах (FirstFragme
сейчас попробую

Добавлено через 47 минут
Цитата Сообщение от NiRamz Посмотреть сообщение
Вот рабочий код
Ничего не выходит( Загнал весь код который отвечает за парсинг и вывод на экран ListView в ThirdFragment в онкритвью. Теперь всё запускается, в логах вижу что он делает парсинг текста, но сам лист вью не появляется(((

Добавлено через 5 минут
Вот фрагмент:

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import android.content.Context;
import android.os.AsyncTask;
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.ListView;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
 
public class ThirdFragment extends Fragment {
    private static final String TAG = "MyApp";
    Device device;
    ArrayList<Device> m_Devices = new ArrayList<Device>();
    //=================
    private Context context;
    private Context context1;
    private ListView contentView;
 
    /** Handle the results from the voice recognition activity. */
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
 
        super.onActivityCreated(savedInstanceState);
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // задаем разметку фрагменту
        final View view = inflater.inflate(R.layout.third, container, false);
        // ну и контекст, так как фрагменты не содержат собственного
        context = view.getContext();
        // выводим текст который хотим
        //=================
        final ThirdFragment context1 = ThirdFragment.this;
        ListView ls2 = new ListView(this.context1);
        // находим список
        // ListView ls2 = (ListView) findViewById(R.id.lvMain);
        CustomAdapter lvAdapter = new CustomAdapter(this.context1, m_Devices);
        ls2.setAdapter(null);
        //=================
        new MyTask().execute();
        ls2.setAdapter(lvAdapter);
        setContentView(ls2);
        //TextView wordsCount = (TextView) view.findViewById(R.id.textView1);
        //wordsCount.setText("ThirdActivity");
        return view;
    }
 
    private void setContentView(ListView ls2) {
 
    }
 
 
    public class MyTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... stri) {
            // ПАРСИМ
            String Str;
            String url = "http://mysite.com/arr.txt";
            StringBuilder sb = null;
            try {
                URL myurl = new URL(url);
                BufferedReader br = new BufferedReader(new InputStreamReader(myurl.openStream()));
                sb = new StringBuilder(100);
                while ((Str = br.readLine()) !=null) {
                    sb.append(Str+"\n");
                }
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            // РАЗБИВАЕМ НА ВХОЖДЕНИЕ
            String input = sb.toString();
            String[] fileData = input.split("\n");
 
            for(int i=0; i<fileData.length; i++)
            {
                String[] fileData2 = fileData[i].split(";");
                int dev;
                dev=Integer.parseInt(fileData2[2]);
                device = new Device(fileData2[0],fileData2[1], dev%2,0, 100 + i);
                m_Devices.add(device);
                Log.d(TAG, "ПЕРВОЕ ВХОЖДЕНИЕ: " + fileData2[0] + " ВТОРОЕ ВХОЖДЕНИЕ: " + fileData2[1] + " ТРЕТЬЕ ВХОЖДЕНИЕ: " + fileData2[2]);
            }
 
            return sb.toString();
        }
    }
 
}
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
19.11.2013, 17:11 13
в
Java
1
R.layout.third
добавьте
XML
1
<ListView android:id="@+id/listView" ...
и в oncreateView сделайте вместо
Java
1
ListView ls2 = new ListView(this.context1);
это
Java
1
ListView ls2 = (ListView) view.findvViewById(R.id.listView);
Добавлено через 1 минуту
Цитата Сообщение от cezer_ak Посмотреть сообщение
setContentView(ls2);
во фрагменте не надо

как вариант можете просто сделать
Java
1
return ls2;
1
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
19.11.2013, 18:57  [ТС] 14
Цитата Сообщение от NiRamz Посмотреть сообщение
...
Не получилось ни один из двух методов...

если ставлю return ls2;
то программа при старте сразу крешется...
если меняю: ListView ls2 = (ListView) view.findViewById(R.id.listView);
то запускается но не появляется ListView.

меняю и то и другое сразу креш.

Что не так???

Добавлено через 9 минут
Цитата Сообщение от NiRamz Посмотреть сообщение
...
когда делаю так:

Java
1
2
3
4
5
6
7
R.layout.third
<ListView android:id="@+id/listView" ...
 
//ListView ls2 = new ListView(this.context1);
ListView ls2 = (ListView) view.findvViewById(R.id.listView);
 
//setContentView(ls2);
Программа запускается. Но как только перехожу на третью страницу там где по идеи должен быть список то программа вылетает с ошибкой...
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
19.11.2013, 19:40 15
Прикрепите лог ошибки
1
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
19.11.2013, 19:57  [ТС] 16
Цитата Сообщение от NiRamz Посмотреть сообщение
...
Ура все заработало, спасибо, поменял было вот так:

Java
1
2
3
4
5
6
        final ThirdFragment context = ThirdFragment.this;       
        ListView ls2 = (ListView) view.findViewById(R.id.listView);        
        CustomAdapter lvAdapter = new CustomAdapter(this.context1, m_Devices);
        ls2.setAdapter(null);       
        new MyTask().execute();
        ls2.setAdapter(lvAdapter);
стало так:

Java
1
2
3
4
5
6
7
8
        final View view = inflater.inflate(R.layout.third, container, false);
        context = view.getContext();
        ListView ls2 = (ListView) view.findViewById(R.id.listView);
        CustomAdapter lvAdapter = new CustomAdapter(this.context, m_Devices);
        ls2.setAdapter(null);
        new MyTask().execute();
        ls2.setAdapter(lvAdapter);
        lvAdapter.notifyDataSetChanged();
Всем спасибо работает! Особая благодарность NiRamz!
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
19.11.2013, 20:14 17
Цитата Сообщение от cezer_ak Посмотреть сообщение
final View view = inflater.inflate(R.layout.third, container, false);
* * * * context = view.getContext();
* * * * ListView ls2 = (ListView) view.findViewById(R.id.listView);
* * * * CustomAdapter lvAdapter = new CustomAdapter(this.context, m_Devices);
* * * * ls2.setAdapter(null);
* * * * new MyTask().execute();
* * * * ls2.setAdapter(lvAdapter);
* * * * lvAdapter.notifyDataSetChanged();
правильнее будет
Java
1
2
3
4
5
6
context = view.getContext();
* * * * ListView ls2 = (ListView) view.findViewById(R.id.listView);
* * * * CustomAdapter lvAdapter = new CustomAdapter(this.context, m_Devices);
* * * * ls2.setAdapter(lvAdapter);
* * * * new MyTask().execute();
* * * * lvAdapter.notifyDataSetChanged();
и потом каждый раз когда необходимо обновить список, вместо того что бы удалять адаптер, заново его создавать и потом назначать вызываем просто .notifyDataSetChanged();
Так же что бы получить контекст во фрагменте можно использовать getActivity();
1
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
20.11.2013, 19:52  [ТС] 18
Цитата Сообщение от NiRamz Посмотреть сообщение
...
Хотел спросить как вывести текст итема на который я кликаю?

Пробовал так:

Java
1
2
3
4
5
6
 ls2.setOnItemClickListener(new AdapterView.OnItemClickListener()
        {
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                Log.d(TAG, (String) arg0.getAdapter().getItem(arg2));
            }
        });
выводит такой текст: adr.app.Device@a6a58e30

Затем пробовал так:

Java
1
2
3
4
5
6
 ls2.setOnItemClickListener(new AdapterView.OnItemClickListener()
        {
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                Log.d(TAG, getBaseContext() + "Clicked on " + arg2);
            }
        });
тут он поругался на строку getBaseContext() и предложил создать вот это :

Java
1
2
3
public Context getBaseContext() {
        return baseContext;
    }
вывод в логах: null Clicked on 2

Ещё пробовал так:

Java
1
2
3
4
5
6
 ls2.setOnItemClickListener(new AdapterView.OnItemClickListener()
        {
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                Log.d(TAG, String.valueOf(arg0.getAdapter().getItem(arg2)));
            }
        });
вывод в логах то же самое что и первое: adr.app.Device@a6a4c320

Уже что только не пробовал, то что надо не выводит(
Подскажите как вывести?
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
21.11.2013, 20:57 19
Цитата Сообщение от cezer_ak Посмотреть сообщение
вывод в логах то же самое что и первое: adr.app.Device@a6a4c320
переопределите в Device метод toString.

или
Цитата Сообщение от cezer_ak Посмотреть сообщение
Log.d(TAG, String.valueOf(arg0.getAdapter().getItem(arg2)));
замените на
Java
1
((Device) arg0.getAdapter().getItem(arg2)).get...
1
5 / 5 / 3
Регистрация: 14.02.2013
Сообщений: 232
21.11.2013, 21:10  [ТС] 20
Цитата Сообщение от NiRamz Посмотреть сообщение
.
Спасибо большое, это работает!
0
21.11.2013, 21:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2013, 21:10
Помогаю со студенческими работами здесь

Адаптер и ListView
Решил написать свой адаптер, работающий с listView. Беда в том, что программа вылетает сразу же....

Адаптер ListView - ошибка
MainActivity.java: ... @Override public void onCreate(Bundle savedInstanceState) {...

Получить item из listView по индексу. Адаптер - simpleadapter
Задача - убрать из listview некоторый итем. Думаю, можно сделать его прозрачным, или изменить...

Как правильно построить адаптер для показа данных из базы в ListView
Всем привет. На данный момент все данные в программе хранятся в классе, есть адаптер для...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru