癜人料理問題ず解決策

すべおのKhabrovitesにこんにちは 私が働いおいる䌚瀟がAndroid甚のコヌカサス料理アプリケヌションをリリヌスしたこずをお知らせしたす。 今、あなたのお気に入りの料理は垞にあなたの指先になりたす。 私はアプリケヌション開発プロセスのほが党䜓に関䞎しおいたので、詳现を共有したいず思いたす。 たず、アプリケヌション自䜓に぀いお説明し、蚘事の埌半では、開発䞭に発生した問題ず可胜な解決策に぀いお説明したす。 その結果、アプリケヌションに興味がある人は最初の郚分を読み、2番目の開発プロセスに興味がある人は読むこずができたす。 行こう



アプリケヌションの抂芁



スクリヌンショットずアプリケヌション自䜓は、垂堎で通垞どおり衚瀺できたす-market.android.com/details?id=net.octobersoft.android.civilcabin



このアプリケヌションを䜿甚するず、お気に入りのレシピず準備方法をすばやく芋぀けるこずができたすデヌタベヌスには200を少し超えるレシピがありたす。 さらに、アシスタントの助けを借りお、芋぀かったレシピに含たれる成分の数をヒントに、お持ちの補品のレシピをすばやく芋぀けるこずができたす。 バスケットの助けを借りお、必芁な補品を保存したり、独自の補品を远加したりできたす。その埌、レシピの準備を開始し、タむマヌを蚭定し、袖をたくり䞊げたす。 レシピを衚瀺するずきにバスケットに材料を远加できたすレシピのカテゎリず奜みのレシピを遞択した埌の最初のタブで。バスケットに远加された新補品は、アシスタントに他の党員ずずもに衚瀺されたす。 そしおもちろん、お気に入りのレシピをすべおお気に入りに保存しお、すばやくアクセスできたす。 すべおのレシピを遞択するず、怜玢バヌが衚瀺され、目的のレシピをすばやく芋぀けるこずができたす。 あなたのお気に入りの料理を䜜るのに圹立぀このような䟿利なアプリケヌション。



アプリケヌションのバヌゞョンが間もなく曎新され、Facebook、Twitter、VKontakte、およびその他のいく぀かの特兞を介しお、アプリケヌションの䜿甚に関する意芋を友達ず共有できるようになりたす。

バグに気づいたら、コメントやメヌルでこれに぀いお曞いおください。



開発。 困難ず可胜な解決策



タブず耇数のりィンドり

お気づきかもしれたせんが、アプリケヌション内のナビゲヌションはタブを䜿甚しお実行されたす。 しかし、倚くのタブには耇数のりィンドりがありたす。 遷移䞭に実行䞭のりィンドりをクリヌニングしないず、ビュヌの階局によっお蚱容倀が増加し、アプリケヌションがドロップするずいう事実に問題がありたす。 これを行うには、TabActivityすべおのタブがあるメむンアプリケヌションりィンドりを継承するから継承した独自のクラスを䜜成し、必芁に応じおonBackPressedをオヌバヌラむドするか、遷移時に自分でfinishを呌び出したす。

たた、1぀のタブの倖芳のカスタマむズに問題がありたした。 実際、これには耇雑なこずは䜕もありたせん。ビュヌを䜿甚しおレむアりトを䜜成し、タブに枡すこずで奜きなようにスタむルを蚭定したす。



掻動状態



䞀郚の著者によるず、ほずんどの堎合およびほずんど必芁なすべお、onCreate単独で、onStart、およびonPauseの状態が䜿甚されたす。 はい、確かにそうですが、アプリケヌションでは、タむマヌもバックグラりンドで動䜜し、りィンドりが砎棄されるずonDestroyが呌び出されるず、アプリケヌションの起動時に再開できるように状態をベヌスにリセットしたす。 Pro Android 2の䜜者は、このメ゜ッドがonStopなどのすべおで呌び出されるずは限らないず䞻匵しおいるため、泚意しおりィンドりのラむフサむクルを培底的に研究しおください。 問題を解決するためのオプションずしお、タむマヌ甚のサヌビスを䜜成できたすが、他のサヌビスが発生する可胜性がありたす。



グラデヌション画像



アプリケヌションの䞀郚の画像にはグラデヌションが含たれおおり、デフォルトでは少なくずも私の゚ミュレヌタヌず実際のデバむスではグラデヌションがストラむプにがやけおおり、䞍気味に芋えたす。 結局のずころ、問題の解決策は簡単です。りィンドりパレットを蚭定したす。 メ゜ッドに次の行を远加しおonAttachedToWindowアクティベヌションメ゜ッドをオヌバヌラむドするこずにより、これを行うこずができたす。



super.onAttachedToWindow(); // !

Window currWind = getWindow();

currWind.setFormat(PixelFormat.RGBA_8888);








ハンドラヌを忘れないでください



UIストリヌムに䜕かを衚瀺する必芁があり、アクティベヌションのコンテキストにない堎合これは確かにAndroidの方法ではありたせん、このクラスを回避するこずはできたせん。 別のオプションは、AsyncTaskを䜿甚するこずです。 このクラスを䜿甚するためのオプションは他にもたくさんありたすたずえば、UI芁玠を曎新するスレッドのキュヌ。



プログラムによるキヌボヌドむベント呌び出し



堎合によっおは、これは必芁になるこずがあり、たずえば次のように解決されたす。

新しいBaseInputConnectiontxtView、false.sendKeyEvemtbackPressedKeyEvent;



他にも方法はあるず思いたすが、䞊蚘のコヌドは怜玢が倱敗した埌、前のりィンドりに戻るのに圹立ちたした。



SQLiteキャッシュ



SQLiteはデヌタをキャッシュしたす。 アプリケヌションの開発䞭にこれを芚えお、ナヌザヌデヌタの消去ボックスをオンにするだけですデヌタを曎新する堎合。 䞀床、私はこの機胜を知らずに、なぜそうなのかを理解するのに数時間を費やしたした。



リスト



ListActivityから継承するかどうか 実際、唯䞀の違いは、りィンドりデザむンで他の芁玠ずレむアりト自䜓が必芁かどうかです。 はいの堎合、継承ずは関係ありたせん。継承しおいない堎合、クラスずsetContentViewを呌び出す必芁はありたせん。

たた、リストに぀いお重芁なこずを1぀芚えおおく必芁がありたす。 リストはビュヌ芁玠を繰り返し䜿甚するため、慎重に䜜業する必芁がありたす。 たずえば、ビュヌメ゜ッドsetTag、getTagを䜿甚しお、任意の識別子をバむンドできたす。 䞊蚘で曞いたように、カスタムアダプタヌの蚘述ずgetViewメ゜ッドでconvertViewパラメヌタヌの䜿甚も慎重に怜蚎する必芁がありたす。



リストを操䜜するずきの別の問題は、ScrollViewでのリストアむテムの誀った衚瀺でした。

レむアりトには次の郚分が含たれたす。

...

<ScrollView

android:layout_width="fill_parent"

android:layout_height="wrap_content">

<LinearLayout

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="vertical">



<ImageView

android:src="@drawable/icon"

android:id="@+id/recipe_img"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:scaleType="fitXY"

android:adjustViewBounds="true"

android:layout_weight="0"/>



<ListView

android:id="@android:id/list"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:scrollbars="none"

android:divider="#00000000"

android:cacheColorHint="#00000000" />



<ImageView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_weight="2"

android:gravity="center"

android:scaleType="fitXY"

android:src="@drawable/cook"/>

...









この蚭蚈オプションでは、リストの芁玠が切り捚おられ、すべおが衚瀺されるわけではありたせん私の意芋では、Googleコヌドにはそのような問題がありたす

この問題の解決策は、リスト内の芁玠の数でリストのサむズを蚭定するこずでした。次のコヌドを䜿甚したす。

//set ListView size by items count

public static void setListViewHeightBasedOnChildren(ListView listView) {

ListAdapter listAdapter = listView.getAdapter();

if (listAdapter == null) {

// pre-condition

return;

}



int totalHeight = 0;

for (int i = 0; i < listAdapter.getCount(); i++) {

View listItem = listAdapter.getView(i, null, listView);

listItem.measure(0, 0);

totalHeight += listItem.getMeasuredHeight();

}



ViewGroup.LayoutParams params = listView.getLayoutParams();

params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));

listView.setLayoutParams(params);

}








察話



Dialogクラスを継承しおカスタムダむアログを䜜成する際に、findViewByIdでボタンを簡単に芋぀けお正垞に機胜するが、EditTextりィゞェットがなかったメ゜ッドがnullを返したずいう難しさが生じたした。 通垞、ルヌト芁玠の怜玢にはLayoutInflaterが䜿甚されたした。 解決策は簡単でした。Dialogクラスを䜜成し、目的のレむアりトを枡しおから、ダむアログからfindViewByIdを呌び出したす。 ちなみに、ダむアログは珟圚のアクティビティに関連付けられおいるため、詊しおいなかったため、アプリケヌションコンテキストを䌝えるこずができたせんでした。 しかし、私はただこの問題を解決できるず思いたす



車茪を再発明しないでください



倚くの既補のクラスずアプリケヌションはすでにAndroidにありたす。そのため、最初にdockたたはgoogleを泚意深く芋るこずをお勧めしたす。



LogCatを䜿甚する



ロギングを䜿甚するず、開発䞭に特にEclipseでフィルタヌを䜿甚しお間違いをすばやく芋぀けお、アクティビティ、サヌビスなどの必芁な出力を衚瀺できるため、垞にそれを䜿甚できたす。 ただし、デバむス䞊の䞀連の暙準サヌビスずアプリケヌションはただログに曞き蟌たれおいたすが、ログはリリヌスバヌゞョンから削陀する必芁がありたすGoogleによるず。



SQLite Manager



Firefox 3.xでこのプラグむンを䜿甚しお、sqliteベヌスを操䜜したした。 無料で、䟿利で、機胜的ですプロシヌゞャを蚘述したり、テヌブル構造、デヌタを参照したり、ク゚リを実行したりできたす。 ですから、開発のためにたさにそれを知らない、たたは同様のツヌルを遞択したいすべおの人にお勧めしたす。 たくさんの遞択肢がありたすが



アプリケヌションのサむズ制限



これは最もおもしろいアむテムです。 垂堎にリリヌスされた圓日たたは1時間に、アプリケヌションのサむズが50MBを超えるこずはできたせん。 このようなチップをありがずうGoogle ...このため、私は最も快適な決定を䞋す必芁がありたした...



スクリヌンショット



これは、遞択したカテゎリのレシピを含むりィンドりです。

画像



すべおのカテゎリのレシピを含む画面

画像



遞択したレシピの画面





そしお、これがタむマヌりィンドりの衚瀺です。





おわりに



私はAndroidの第䞀人者ではないHabréでの初めおのアプリケヌションおよびパヌトタむムの最初の投皿ですため、掚奚事項に挑戊するこずができるこずを匷調したす。プラットフォヌムには1぀の問題を解決するいく぀かの方法がありたすが、私がレビュヌしたヒントは喜んでいたす 私は経隓の亀換の呌びかけを支持したす。それはすでにHabréにありたした。



それ以倖の堎合、開発プロセスはWebアプリケヌションのプロセスず䌌おいたした。デヌタモデルが蚘述され、このモデルのCRUD操䜜、むンタヌフェむス、および必芁な機胜がありたす。 困難は、Androidプラットフォヌムを知らないこずず、モバむルプラットフォヌム甚のアプリケヌションを䜜成した経隓がないためです。



プラむベヌトメッセヌゞのトピックに関するコメントず提案。

ご枅聎ありがずうございたした



UPDアプリケヌションが無料版で利甚可胜になりたした

market.android.com/details?id=net.octobersoft.android.caucasuscabinfree



All Articles