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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 44, средняя оценка - 4.73
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
#1

EditText в одном из Item ListView - Программирование Android

07.06.2013, 19:25. Просмотров 5749. Ответов 84
Метки нет (Все метки)

Помогите решить довольно нестандартную задачу. У меня есть ListView, есть Adapter который делает кастомный вид разметки. В ListView выводится список слов и один из элементов ListView содержит надпись "мой текст". Мне нужно, чтобы при клике на элемент ListView где написано "мой текст", появилась клавиатура и предлагало сюда ввести текст, т.е. в этой ячейке должен быть editText, но в других ячейках должен быть только текст и вписать в них ничего нельзя.

Ещё на элементе должна быть справа картинка (типа radiobutton но своя картинка), которая будет говорить какой элемент выбран и после по нажатию кнопки которая будет находится под 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
import android.os.Bundle;
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;
 
public class Registration_Activity extends FragmentActivity {
    PagerAdapter pagerAdapter;
    public ViewPager mViewPager;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        setContentView(R.layout.registration_activity);     
        
        mViewPager = (ViewPager) findViewById(R.id.pager);      
        TitleAdapter titleAdapter = new TitleAdapter(getSupportFragmentManager());
        mViewPager.setAdapter(titleAdapter);
        mViewPager.setCurrentItem(0);
       
    }
    
    public class TitleAdapter extends FragmentPagerAdapter {        
        private final Fragment frags[] = new Fragment[3];    
        public TitleAdapter(FragmentManager fm) {
            super(fm);
            
            frags[0] = new Registration_Fragment1();
            frags[1] = new Registration_Fragment2();
            frags[2] = new Registration_Fragment3();
        }
     
        @Override
        public Fragment getItem(int position) {
            return frags[position];
        }
     
        @Override
        public int getCount() {
            return frags.length;
        }
    }
 
        
    }
Фрагмент где всё происходит
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
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
 
public class Registration_Fragment1 extends Fragment {
 
    private String[] listview_array = { "ONE", "TWO", "THREE", "мой текст" };
 
    ListView myList;
 
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        AdapterFragment mAdapter = new AdapterFragment(getActivity(),
                listview_array);
        myList.setAdapter(mAdapter);
        super.onActivityCreated(savedInstanceState);
 
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
 
        View myView = inflater.inflate(R.layout.registration_screen_2,
                container, false);
 
        myList = (ListView) myView.findViewById(R.id.listView);
 
        AdapterFragment mAdapter = new AdapterFragment(getActivity(),
                listview_array);
        myList.setAdapter(mAdapter);
 
        Helper.getListViewSize(myList);
 
        return myView;
    }
 
}
Адаптер
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
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
 
public class AdapterFragment extends ArrayAdapter<String> {
    private final Context context;
    private final String[] values;
 
    public AdapterFragment(Context context, String[] values) {
        super(context, R.layout.item, values);
        this.context = context;
        this.values = values;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 
        View rowView = inflater.inflate(R.layout.item, parent, false);
        TextView textView = (TextView) rowView.findViewById(R.id.textView111);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView111);
        textView.setText(values[position]);
 
        // Change icon based on name
        String s = values[position];
 
        System.out.println(s);
 
        return rowView;
    }
}
разметка
XML
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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/ic_launcher"
    android:orientation="vertical" >
 
    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:background="@drawable/ic_launcher"
        android:orientation="vertical" >
    </LinearLayout>
 
    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/linearLayout1" >
 
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="499dp" >
 
            <LinearLayout
                android:id="@+id/linearLayout2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="10dp"
                android:orientation="vertical" >
 
                <ImageView
                    android:id="@+id/imageView1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:src="@drawable/ic_launcher" />
 
                <TextView
                    android:id="@+id/textViewTitleQuiz"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp"
                    android:layout_marginRight="10dp"
                    android:text="TextView" />
            </LinearLayout>
 
            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/linearLayout2"
                android:layout_below="@+id/linearLayout2"
                android:layout_marginTop="5dp"
                android:text="TextView" />
 
            <LinearLayout
                android:id="@+id/linearLayout3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/textView2"
                android:layout_centerHorizontal="true"
                android:orientation="vertical" >
 
                <TextView
                    android:id="@+id/textView3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp"
                    android:layout_marginTop="5dp"
                    android:text="TextView" />
            </LinearLayout>
 
            <LinearLayout
                android:id="@+id/linearLayout4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/linearLayout3"
                android:layout_centerHorizontal="true"
                android:orientation="vertical" >
 
                <ListView
                    android:id="@+id/listView"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:layout_marginTop="10dp" >
                </ListView>
            </LinearLayout>
 
            <Button
                android:id="@+id/buttonApply"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/linearLayout3"
                android:layout_below="@+id/linearLayout4"
               android:text="Apply" />
        </RelativeLayout>
 
    </ScrollView>
 
</RelativeLayout>
разметка Item

XML
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/close_task_item_answer">
 
        <TextView
            android:id="@+id/textView111"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:text="Medium Text"
            android:textAppearance="?android:attr/textAppearanceMedium" />
 
        <ImageView
            android:id="@+id/imageView111"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="22dp"
            android:src="@android:drawable/ic_delete" />
 
    </RelativeLayout>
 
</LinearLayout>
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
07.06.2013, 19:31     EditText в одном из Item ListView #2
Java
1
2
3
4
5
6
listView.setOnItemClickListener(new OnItemClickListener(){
            public void onItemClick (AdapterView<?> parent, View view, int position, long id) {
                    //position - индекс айтема
                   //view - сам айтем
            }
});
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
07.06.2013, 19:35  [ТС]     EditText в одном из Item ListView #3
Дополняю.
ссылка содержит пример editText в ЛистВью, но там ЭдитТекст в каждом айтаме, а мне нужно только в одном. Но как это совместить с моим кодом мне очень сложно понять, помогите разобраться.

Добавлено через 1 минуту
Цитата Сообщение от V0v1k Посмотреть сообщение
Java
1
2
3
4
5
6
listView.setOnItemClickListener(new OnItemClickListener(){
                   public void onItemClick (AdapterView<?> parent, View view, int position, long id) {
                              //position - индекс айтема
                             //view - сам айтем
                  }
});
извините не понял ничего. Это же как обработать событие Item. А с EditText как быть?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
07.06.2013, 19:41     EditText в одном из Item ListView #4
http://stackoverflow.com/questions/9...ts-in-listview
здесь есть ответ про использования разных айтемов в одном листе.

Добавлено через 1 минуту
Цитата Сообщение от Stylish2013 Посмотреть сообщение
извините не понял ничего. Это же как обработать событие Item. А с EditText как быть?
я просто неправильно понял проблему...

Добавлено через 49 секунд
Цитата Сообщение от Stylish2013 Посмотреть сообщение
ссылка содержит пример editText в ЛистВью, но там ЭдитТекст в каждом айтаме, а мне нужно только в одном.
Цитата Сообщение от V0v1k Посмотреть сообщение
http://stackoverflow.com/questions/9...ts-in-listview
здесь есть ответ про использования разных айтемов в одном листе.
в суме должно получится то, что вам нужно...
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
07.06.2013, 19:49  [ТС]     EditText в одном из Item ListView #5
Цитата Сообщение от V0v1k Посмотреть сообщение
в суме должно получится то, что вам нужно...
А не могли бы вы помочь? понять очень сложно что делать.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
07.06.2013, 19:58     EditText в одном из Item ListView #6
что конкретно не понятно?
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
07.06.2013, 20:02  [ТС]     EditText в одном из Item ListView #7
Как нужно изменить мой класс Адаптера, чтобы он отобразил ещё и EditText
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
07.06.2013, 20:03     EditText в одном из Item ListView #8
перейдите по ссылке которую я написал, там все есть...
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
07.06.2013, 20:05  [ТС]     EditText в одном из Item ListView #9
Цитата Сообщение от V0v1k Посмотреть сообщение
перейдите по ссылке которую я написал, там все есть...
Я перешёл, но там же автор не решил своей проблемы вот я и не понимаю где какой код вставлять чтобы работало.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
07.06.2013, 20:09     EditText в одном из Item ListView #10
говорю же, в ответе есть решение, там где написано
Implement the getItemViewType() and getViewTypeCount() for your adapter:
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
07.06.2013, 20:20  [ТС]     EditText в одном из Item ListView #11
а почему-то у меня подчёркивает ViewHolder и getSystemService???? импорт не предлагает сделать
Java
1
2
 ViewHolder holder = new ViewHolder();
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Добавлено через 8 минут
getSystemService(Context.LAYOUT_INFLATER_SERVICE); подчеркивает и пишет: The method getSystemService(String) is undefined for the type AdapterFragment. Может из-за того что я в фрагменте и по другому контекст нужно указать?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
07.06.2013, 20:20     EditText в одном из Item ListView #12
не нужно бездумно копировать код....
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
07.06.2013, 20:50  [ТС]     EditText в одном из Item ListView #13
хотя это же не фрагмент, а просто класс

Добавлено через 4 минуты
Цитата Сообщение от V0v1k Посмотреть сообщение
не нужно бездумно копировать код....
согласен

Добавлено через 22 минуты
Да это сработало)))) изменил я Адаптер, выглядит вот так:

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
package by.example.fragmentexample;
 
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
 
public class AdapterFragment extends ArrayAdapter<String> {
    private final Context context;
    private final String[] values;
 
    public AdapterFragment(Context context, String[] values) {
        super(context, R.layout.item, values);
        this.context = context;
        this.values = values;
    }
    
    public View getView(final int position, View convertView, ViewGroup parent) {
        View view = convertView;
        int theType = getItemViewType(position); 
        if (view == null) {
          ViewHolder holder = new ViewHolder();
          LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
          if (theType == 0) {
              // inflate the ordinary row
              view = vi.inflate(R.layout.item, null);
              holder.textView = (TextView)view.findViewById(R.id.textView111);      
          } else if (theType == 1){
             // inflate the row for the last position
              view = vi.inflate(R.layout.item2, null);
         //     holder.textView = (TextView)view.findViewById(R.id.textView2222);
              holder.editText = (EditText)view.findViewById(R.id.editText333);
          } 
          view.setTag(holder);
         }
        
        return view;
 //other stuff here, keep in mind that you have a different layout for your last position so double check what are trying to initialize
}
    
    
    static class ViewHolder {
          TextView textView;
          EditText editText;
//        ImageView icon;
//        ProgressBar progress;
          int position;
        }
    
    
    @Override
    public int getViewTypeCount() {
       return 2; //return 2, you have two types that the getView() method will return, normal(0) and for the last row(1)
    }
    
    
    @Override
    public int getItemViewType(int position) {
        return (position == this.getCount() - 1) ? 1 : 0; //if we are at the last position then return 1, for any other position return 0
    }
    
}
Но появились новые проблемы. Как теперь поместить данные в одну разметку как в edit text и ещё как же потом получить все эти значения???????
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
07.06.2013, 20:57     EditText в одном из Item ListView #14
не понял вопросы.

на заметку:
вы convertView не используете ни в старом коде ни в новом, посмотрите примеры адаптеров как в них используют convertView.
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
07.06.2013, 21:26  [ТС]     EditText в одном из Item ListView #15
Цитата Сообщение от V0v1k Посмотреть сообщение
не понял вопросы.
Как теперь получить все эти значения значения с item или editText?

Добавлено через 8 минут
Цитата Сообщение от V0v1k Посмотреть сообщение
вы convertView не используете ни в старом коде ни в новом, посмотрите примеры адаптеров как в них используют convertView.
я же использую. Это не то ?:

Java
1
2
3
4
5
 View view = convertView;
...
 ViewHolder holder = new ViewHolder();
...
  holder.textView = (TextView)view.findViewById(R.id.textView111);
Добавлено через 15 минут
Вот так получаю значение из item текст, а как получить из editText???
Java
1
2
String item = (String) myList.getItemAtPosition(position);
Toast.makeText(getActivity(),"You selected : " + item,Toast.LENGTH_SHORT).show();
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
07.06.2013, 21:29     EditText в одном из Item ListView #16
Цитата Сообщение от Stylish2013 Посмотреть сообщение
Как теперь получить все эти значения значения с item или editText?
вам при клике? или когда?

Цитата Сообщение от Stylish2013 Посмотреть сообщение
я же использую. Это не то ?:
не совсем.
и holder тоже только наполняете и не используете.

Добавлено через 2 минуты
Цитата Сообщение от Stylish2013 Посмотреть сообщение
а как получить из editText???
создайте переменную указывающую на этот editText например.
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
07.06.2013, 21:42  [ТС]     EditText в одном из Item ListView #17
Цитата Сообщение от V0v1k Посмотреть сообщение
вам при клике? или когда?
Мне нужно нажать на Item сделается пометка на item (типа галочка) и потом снизу будет отдельная кнопка (не в listView). По её нажатию должен получить значение отмеченного item, а если текст введен в edit Text тогда получить значение только из Edit Text.

Цитата Сообщение от V0v1k Посмотреть сообщение
создайте переменную указывающую на этот editText например.
в он клик делаю так:

Java
1
2
3
4
5
    for (int i = 0; i < myList.getAdapter().getCount(); i++) {
                    view = myList.getChildAt(i);
                    EditText tipoEditText = (EditText) myList.findViewById(R.id.editText333);
                                        Log.d(LOG_TAG, tipoEditText.getText().toString());
                                }
я на правильном пути?
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
07.06.2013, 21:52     EditText в одном из Item ListView #18
не понятно зачем такой код...

Добавлено через 1 минуту
если у вас только 1 editText, то зачем вам его в цикле искать?
Stylish2013
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
07.06.2013, 21:52  [ТС]     EditText в одном из Item ListView #19
Цитата Сообщение от V0v1k Посмотреть сообщение
не понятно зачем такой код...
ну просто такой вариант

Java
1
2
3
EditText tipoEditText;
.....
tipoEditText = (EditText) myList.findViewById(R.id.editText333);
не работает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2013, 21:55     EditText в одном из Item ListView
Еще ссылки по теме:
Прокрутка ListView в начало при обновлении EditText Android
Два события onClick в одном item Android
Ошибка при выборе Item в ListView Android
ListView кнопка добавить item в избранное Android
Сохранить измененные значения EditText в ListView при прокрутке Android

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

Или воспользуйтесь поиском по форуму:
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
07.06.2013, 21:55     EditText в одном из Item ListView #20
Цитата Сообщение от Stylish2013 Посмотреть сообщение
Мне нужно нажать на Item сделается пометка на item (типа галочка)
отлавливайте это событие и запоминайте иначе галочка будет пропадать при скролинге и появляться в других местах...

Добавлено через 1 минуту
Java
1
2
3
4
5
6
else if (theType == 1){
             // inflate the row for the last position
              view = vi.inflate(R.layout.item2, null);
         //     holder.textView = (TextView)view.findViewById(R.id.textView2222);
              holder.editText = (EditText)view.findViewById(R.id.editText333);
          }
ну вот здесь вы получаете editText, здесь же его куда-то запихайте чтобы можно было потом достать с него значение.
Yandex
Объявления
07.06.2013, 21:55     EditText в одном из Item ListView
Ответ Создать тему
Опции темы

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