Message body
擬似ツイッター
実行すると二人の学生が会話記録をリストで閲覧できるtwitter風アプリを作成しなさい。また 各発言ツイートをタップクリックした場合個別の発言内容別のactivityで見ることができるようにしなさい なお このアプリは アプリ上で見れる回はリアルタイムではなく発言の記録を用意した上で それを閲覧するという形で良い
作成する必要があるもの
登場人物2人分後 画像 画像 画像 ファイル 名前発言内容発現時間
mainactivity java いつものここにテキストで会話内容がリスト表示される
tweet java 追加作成ひとりの登場人物の1 ツイートを表現するためのクラス
自画像 名前 発言内容 発言時間 を表現するための変数を持たせること
tweetactivity java 追加作成1ツイート単体を閲覧するためのアクティビティ
activity mainxml いつものアプリのtopページのレイアウトを設定がされたファイル
activity tweet xml 追加作成 リストの1ツイート単体のレイアウト 設定がされたファイル
そのほか 必要があれば追加してください
追加要素
データベースを使用する
実際のツイッターと連携する
ツイートを追加できるようにする
layoutのデザインはお任せします。
layoutのソースコードも入れてください。
activity mainxml↓
例
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.tweetandroid.MainActivity" >
</LinearLayout><LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/button1" android:layout_width="102dp" android:layout_height="69dp" android:text="投稿" /> <EditText android:id="@+id/comment" android:layout_width="match_parent" android:layout_height="70dp" android:layout_weight="1" android:ems="10" android:hint="140字以内で入力してね" android:textSize="30sp" > <requestFocus /> </EditText> </LinearLayout> <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView>
mainactivity java↓
package com.example.tweetandroid;
import java.util.ArrayList;
import java.util.Calendar;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
/*
- 画像はまだデータベースに保存出来ていません。
*/
public class MainActivity extends Activity implements OnItemClickListener,OnClickListener{
DataBase helper; Bitmap bmp1,bmp2; EditText name,comment; Button button; ListView list; ArrayList<Tweet> array; Globals globals; int position; final Calendar calendar = Calendar.getInstance();
// int year;
int month; //月
int day; //日
int hour; //時
int minute; //分
// int second;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //レイアウト部品と結び付け list = (ListView)findViewById(R.id.listView1);
// name = (EditText)findViewById(R.id.name);
comment = (EditText)findViewById(R.id.comment);
button = (Button)findViewById(R.id.button1);
button.setOnClickListener(this);
//月日時分設定
// year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH);
day = calendar.get(Calendar.DAY_OF_MONTH);
hour = calendar.get(Calendar.HOUR_OF_DAY);
minute = calendar.get(Calendar.MINUTE);
// second = calendar.get(Calendar.SECOND);
//画像用意 Resources res = getResources(); bmp1 = BitmapFactory.decodeResource(res, R.drawable.img14125); bmp2 = BitmapFactory.decodeResource(res, R.drawable.img14123); //グローバル変数 globals = (Globals)this.getApplication(); //配列用 array = new ArrayList<Tweet>(); helper = new DataBase(this);//ヘルパークラスの初期化 SQLiteDatabase db = helper.getWritableDatabase(); //初期リスト設定 String[] colms = {"name","comment","time"}; Cursor cursor = db.query ("tweet",colms,null,null,null,null,null);
// if (cursor.moveToFirst()){
if(cursor.moveToNext()){
array.add(new Tweet(bmp1,cursor.getString(0),cursor.getString(1),cursor.getString(2)));
cursor.moveToNext();
array.add(new Tweet(bmp2,cursor.getString(0),cursor.getString(1),cursor.getString(2)));
while(cursor.moveToNext()){
array.add(new Tweet(bmp1,cursor.getString(0),cursor.getString(1),cursor.getString(2)));
}
}
// }
list.setAdapter(new CustomAdapter(this, R.layout.list_item,array)); list.setOnItemClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, 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(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { /* Intent intent = new Intent(this,TweetActivity.class); intent.putExtra("image",array.get(position).image); intent.putExtra("name",array.get(position).name); intent.putExtra("comment",array.get(position).comment); intent.putExtra("time",array.get(position).time);
*/
globals.position = position;
globals.img = array.get(position).image;
globals.name = array.get(position).name;
globals.comment = array.get(position).comment;
globals.time = array.get(position).time;
startActivity(new Intent(this, TweetActivity.class));
// startActivity(intent);
}
@Override public void onClick(View v) { month = calendar.get(Calendar.MONTH); day = calendar.get(Calendar.DAY_OF_MONTH); hour = calendar.get(Calendar.HOUR_OF_DAY); minute = calendar.get(Calendar.MINUTE);
// second = calendar.get(Calendar.SECOND);
if (v == button){
if (comment.getText().toString().equals("")){ Toast.makeText(this, "投稿内容が空です。", Toast.LENGTH_LONG).show(); }else if (comment.getText().toString().length() > 140){ Toast.makeText(this, "140字以内で入力して下さい。", Toast.LENGTH_LONG).show(); }else{
// String today = (month+1)+"月"+day+"日"+hour+":"+minute;
SQLiteDatabase db = helper.getWritableDatabase(); ContentValues cv = new ContentValues();//挿入する情報を表現するクラス cv.put("name","@Fukushima");//列名、中身のセット cv.put("comment",comment.getText().toString());// if (minute < 10){ cv.put("time",(month+1)+"月"+day+"日"+hour+":"+"0"+minute); }else{ cv.put("time",(month+1)+"月"+day+"日"+hour+":"+minute); } db.insert("tweet",null,cv);//dbに情報を挿入する。tweetはテーブル名
// array.add(new Tweet(bmp1,"福島",comment.getText().toString(),(month+1)+"月"+day+"日"+hour+":"+minute));
helper = new DataBase(this);//ヘルパークラスの初期化 String[] colms = {"name","comment","time"}; Cursor cursor = db.query ("tweet",colms,null,null,null,null,null); /* if(cursor.moveToNext()){ array.add(new Tweet(bmp1,cursor.getString(0),cursor.getString(1),cursor.getString(2))); cursor.moveToNext(); array.add(new Tweet(bmp2,cursor.getString(0),cursor.getString(1),cursor.getString(2))); while(cursor.moveToNext()){ array.add(new Tweet(bmp1,cursor.getString(0),cursor.getString(1),cursor.getString(2))); } }*/ cursor.moveToLast(); array.add(new Tweet(bmp1,cursor.getString(0),cursor.getString(1),cursor.getString(2))); PostDialog md = new PostDialog(this); md.show(this.getFragmentManager(),"messageDialog");
// Toast.makeText(this, "投稿完了",Toast.LENGTH_LONG).show();
comment.setText("");
} } }
}