Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Наглядно расположить данные в GridView

Мне нужно отобразить в GridView следущее. У меня есть один большой обьект в нем есть 2 обьекта один user маленький(состоит из двух полей int balance; int miles и второй feed - он содержит 3 массива обьектов - первый массив содержит 4 обьекта, второй массив - 6 обьектов, третий массив - 3 обьекта. Причем каждый из обьектов этих массивов содержит 6 полей и еще четыре обьекта( информация в полях текстовая, целочисленная первый обьект содержит 2 поля, второй - 2 поля, третий - 2 поля, а четвертый - 5 полей). Нужно это все компактно отобразить в GridView по колонкам и ячейкам, чтобы все понятно и наглядно смотрелось. По какой схеме отображать все это(сколько колонок, ячеек и так далее)? Как грамотно расположить информацию в строках, столбцах, ячейках таблицы, чтобы все выглядело грамотно и компактно? Можете посоветовать

Добавлено через 4 часа 12 минут
Или может здесь TableView можно использовать или множество LinearLayout. Можете подсказать идею как это все можно грамотно и наглядно отобразить?
Ответ: что бы это грамотно расположить - надо грамотно и понятно для других поставить задачу
Вопрос: Остановить поток запущенный внутри onRefresh()

У меня есть активити, которое реализует интерфейс SwipeRefreshLayout.OnRefreshListener. В его методе onRefresh() я запускаю поток Thread. Внутри метода run этого потока выполняю сетевой запрос получаю JSON и вызываю метод h.post(handleProcess); - метод соответственно Handlera, который в UI потоке запускает handleProcess - Runnable(этот кусок кода обновляет текст в TextView). Вопрос в том как мне теперь грамотно завершить поток который запускается внутри onRefresh? Тем более метод stop у Thread уже устарел? Какую конструкцию для завершения потока мне здесь нужно использовать?
Вот фрагмент кода с потоком
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
@Override
    public void onRefresh() {
 
        Log.d("Func", "Refresh" );
        Thread t = new Thread(new Runnable() {
            public void run() {
 
               getjson = req.cashingJSON();
 
 
                    //Log.d("Func", getjson );
                    h.post(handleProcess);
 
            }
 
            });
        t.start();
 
    }
 
    Runnable handleProcess = new Runnable() {
        public void run() {
 
            Log.d("Func","in handleProcess");
            //t.interrupt();
            if(getjson != null) {
                List<Object> data = req.parseResult(getjson);
                User user = (User) data.get(0);
 
                list1 = (ArrayList<_20140413>) data.get(1);
                list2 = (ArrayList<_20140414>) data.get(2);
                list3 = (ArrayList<_20140415>) data.get(3);
 
                Log.d("Func", "" + user.getBalance() + user.getMiles());
 
                mSwipeRefreshLayout.setRefreshing(false);
 
                textView.setText("USER" + '\n' + "balance" + "    " + user.getBalance() + '\n' + "miles" + "    " + user.getMiles());
            }
        }
    };
Ответ:
Сообщение от yura91
Несмотря на то что его ширину и высоту задаешь в dp
для этого придумали weight классика жанра
Вопрос: Нарисовать круговую диаграмму с разной высотой для каждой части

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

Делать пытаюсь на канвасе, код который рисуте круговую диаграмму ниже
Java(TM) 2 Platform Standard Edition 5.0
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
public class RoundView extends View {
    private Paint slicePaint;
    private int[] sliceClrs = { Color.GREEN, Color.BLUE, Color.RED, Color.YELLOW };
    private RectF rectf;
    private float[] datapoints;
 
    public RoundView(Context context, AttributeSet attrs) {
        super(context, attrs);
        slicePaint = new Paint();
        slicePaint.setAntiAlias(true);
        slicePaint.setDither(true);
        slicePaint.setStyle(Paint.Style.FILL);
    }
 
    @Override
    protected void onDraw(Canvas canvas) {
        if (this.datapoints != null) {
            int startTop = 0;
            int startLeft = 0;
            int endBottom = getWidth();
            int endRight = endBottom;
 
            rectf = new RectF(startLeft, startTop, endRight, endBottom);
 
            float[] scaledValues = scale();
            float sliceStartPoint = 0;
            for (int i = 0; i < scaledValues.length; i++) {
                slicePaint.setColor(sliceClrs[i]);
                canvas.drawArc(rectf, sliceStartPoint, scaledValues[i], true, slicePaint);
                sliceStartPoint += scaledValues[i];
            }
        }
    }
 
    public void setDataPoints(float[] datapoints) {
        this.datapoints = datapoints;
        invalidate();
    }
 
    private float[] scale() {
        float[] scaledValues = new float[this.datapoints.length];
        float total = getTotal();
        for (int i = 0; i < this.datapoints.length; i++) {
            scaledValues[i] = (this.datapoints[i] / total) * 360;
        }
        return scaledValues;
    }
 
    private float getTotal() {
        float total = 0;
        for (float val : this.datapoints)
            total += val;
        return total;
    }
}
Вызываем вот так
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
RoundView pieChartView = (RoundView) findViewById(R.id.round);
        float[] datapoints = {450, 1230, 200, 400};
        pieChartView.setDataPoints(datapoints);
Рисует просто круг и елит его на части... Что то мне подсказывает что нужно искать и делать как то по другому, потому что в канве не получается так гибко это реализовать... А может я чего то не знаю) Подскажите что нибудь плиз)
Ответ:
Сообщение от Spelcrawler
dajver, еще забыл тут по идее ширина и высота должны быть одинаковые)
а ну блин, логично, мог и сам догадаться. спасибо огромное теперь все круто)
Вопрос: Как правильно поставить минимальную дату

У меня две кнопки. Первый вылета, второй прилета. У даты вылета minDate = today. А у даты прилета minDate должна быть равной выбранной дате на вылета.

В onCreate():

Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
final Calendar nextYear = Calendar.getInstance();
        nextYear.add(Calendar.YEAR, 1);
 
        Date today = new Date();
        Date departs;
 
        initButtonListeners(today, nextYear);
Сами клики:

Java(TM) 2 Platform Standard Edition 5.0
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
public void initButtonListeners(final Date today, final Calendar nextYear) {
        findViewById(id.linearCalendar).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showCalendarInDialog("Выберите дату вылета", R.layout.calendar_dialog_customized);
 
                    dialogView.init(today, nextYear.getTime())
                            .withSelectedDate(new Date(departData));
 
            }
        });
 
        findViewById(id.linearArrive).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showCalendarInDialog("Выберите дату прилета", R.layout.calendar_dialog_customized);
 
                Date dates = null;
 
                    SimpleDateFormat format = new SimpleDateFormat("dd MMM yyyy");
                    try {
                        dates = format.parse(departData);
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                    dialogView.init(dates, nextYear.getTime())
                            .withSelectedDate(new Date(arriveData));
                }
 
            }
        });
 
    }

OnDateClickListener:

Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
dialogView.setOnDateSelectedListener(new CalendarPickerView.OnDateSelectedListener() {
            DateFormat dateFormat = new SimpleDateFormat("dd MMM yyyy");
 
            @Override
            public void onDateSelected(Date date) {
                if(isFrom){
                    departData = dateFormat.format(date);
                    tvDepart.setText(departData);
                }else{
                    arriveData = dateFormat.format(date);
                    tvArrive.setText(arriveData);
                }
 
                theDialog.dismiss();
 
            }
 
            @Override
            public void onDateUnselected(Date date) {
 
            }
 
        });
При клике Прилета, вылетает приложение, говорит о нулевом значении

Ошибка:

java.lang.IllegalArgumentException: The string argument is null
at java.util.Date.parse(Date.java:373)
at java.util.Date.<init>(Date.java:149)
at com.tezz.MainContent.ContentActivity$2.onClick(ContentActivity.java:305)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)



Вопрос:

Что не правильно, как поставить minDate?
Ответ: ContentActivity.java:305
Вопрос: Реализация отправки фото в чате wifi-direct

Необходимо реализовать передачу фото в чате посредством wi-fi direct, как использовать камеру мне понятно, но ничего не получается с самой передачей, нашел на гитхабе , но не могу прикрутить это к своему коду
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
public class ChatAdapter extends BaseAdapter{
    public static Bitmap bitmap;
    private HashMap<String,Bitmap> mapThumb;
 
    private Context mContext;
    private ArrayList<ChatMessage> mMessages;
    private HashMap<String, Integer> mColorsForUsers;
    private int[] mColors = null;
    private final int NUM_OF_COLORS = 16;
 
 
    public ChatAdapter(Context context, ArrayList<ChatMessage> messages) {
 
        super();
        this.mContext = context;
        this.mMessages = messages;
        this.mColorsForUsers = new HashMap<String, Integer>();
        mapThumb = new HashMap<String, Bitmap>();
 
 
 
        mColors = new int[NUM_OF_COLORS];
        int i=0;
        mColors[i++]=R.color.AntiqueWhite;
        mColors[i++]=R.color.Cyan;
        mColors[i++]=R.color.DarkGray;
        mColors[i++]=R.color.Blue;
        mColors[i++]=R.color.Yellow;
        mColors[i++]=R.color.Azure;
        mColors[i++]=R.color.Lavender;
        mColors[i++]=R.color.Magenta;
        mColors[i++]=R.color.Gold;
        mColors[i++]=R.color.Black;
        mColors[i++]=R.color.Green;
        mColors[i++]=R.color.Gray;
        mColors[i++]=R.color.BlanchedAlmond;
        mColors[i++]=R.color.MediumTurquoise;
        mColors[i++]=R.color.PaleGoldenrod;
        mColors[i++]=R.color.Silver;
    }
 
 
 
    @Override
    public int getCount() {return mMessages.size();}
 
    @Override
    public Object getItem(int position) {return mMessages.get(position);}
    
 
    
 
    @SuppressLint("ResourceAsColor")
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
 
        View view = convertView;
 
        
        ChatMessage message = (ChatMessage) this.getItem(position);
        int msgColor;
 
        ViewHolder holder;
        if(convertView == null)
        {
            holder = new ViewHolder();
 
            holder.image = (ImageView) view.findViewById(R.id.image);
 
 
            convertView = LayoutInflater.from(mContext).inflate(R.layout.chat_activity_list_item, parent, false); //get the xml layout
            holder.mMessage = (TextView) convertView.findViewById(R.id.message_text);
            holder.mTimeAndUserName =(TextView) convertView.findViewById(R.id.message_time_and_userName);
 
            convertView.setTag(holder);
        }
        else
            holder = (ViewHolder) convertView.getTag();
 
        holder.mMessage.setText(message.getMessage());
        holder.mTimeAndUserName.setText("   "+message.getTime()+"  "+message.getUserName()+"   ");
 
        holder.mTimeAndUserName.setTextColor(R.color.textFieldColor);
        holder.mTimeAndUserName.setTextSize(14);
 
        LayoutParams lp = (LayoutParams) holder.mMessage.getLayoutParams();
        LayoutParams lp2 = (LayoutParams) holder.mTimeAndUserName.getLayoutParams();
 
        if(message.isMine())
        {
            holder.mMessage.setBackgroundResource(R.drawable.speech_bubble_green);
            lp.gravity = Gravity.RIGHT;
            lp2.gravity = Gravity.RIGHT;
            holder.mMessage.setTextColor(mContext.getResources().getColor(R.color.Black));
        }
 
        else
        {
            holder.mMessage.setBackgroundResource(R.drawable.speech_bubble_orange);
 
            msgColor = getColorForUser(message.mUserUnique);
 
            holder.mMessage.setTextColor(mContext.getResources().getColor(msgColor));
 
            lp.gravity = Gravity.LEFT;
            lp2.gravity = Gravity.LEFT;
 
        }
        holder.mMessage.setLayoutParams(lp);
 
 
        holder.mTimeAndUserName.setLayoutParams(lp2);
 
        return convertView;
    }
, если кто поможет разобраться, буду очень признателен, всем заранее спасибо!
Ответ: ну вроде директ тут большой роли не играет (могу ошибаться), а в примере есть пример построения сообщения
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
else if(type == Message.IMAGE_MESSAGE){
            enableTextView(cache, mes.getmText());
            cache.image.setVisibility(View.VISIBLE);
            
            if(!mapThumb.containsKey(mes.getFileName())){
                Bitmap thumb = mes.byteArrayToBitmap(mes.getByteArray());
                mapThumb.put(mes.getFileName(), thumb);             
            }
            cache.image.setImageBitmap(mapThumb.get(mes.getFileName()));
            cache.image.setTag(position);
            
            cache.image.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    Message mes = listMessage.get((Integer) v.getTag());
                    bitmap = mes.byteArrayToBitmap(mes.getByteArray());
                    
                    Intent intent = new Intent(mContext, ViewImageActivity.class);
                    String fileName = mes.getFileName();
                    intent.putExtra("fileName", fileName);
                    
                    mContext.startActivity(intent);
, который у меня не получатся впихнуть в свой код, вот в другом классе этого же кода(примера) , как то бы понять как все это соединить воедино и реализовать в моем коде