私は Android アプリを作成しています。チャット バブル (吹き出し) を含むリスト ビューがあります。ユーザーがオプションから画像を挿入した場合、これらのチャット バブルに画像を追加したい場合、私のアプリは次のようになります -->
この画像をアプリに挿入したいのですが、ユーザーが画像ボタンから挿入すると、これまで自分でアダプターをカスタマイズしました。私の AwesomeAdapter クラスと Main_activity を見てください。
Main_Activity.java
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start();
text = (EditText) this.findViewById(R.id.txtMessage);
sndButton=(Button)findViewById(R.id.buttonchat3);
//sndButton.setEnabled(false);
messages = new ArrayList<Message>();
adapter = new AwesomeAdapter(this, messages);
setListAdapter(adapter);
}
public void sendMessage(View v)
{
String newMessage = text.getText().toString().trim();
if(newMessage.length() > 0)
{
text.setText("");
addNewMessage(new Message(newMessage, true));
mConnection.sendTextMessage(newMessage);
}
}
public void receiveImage(View v)
{
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent,RESULT_LOAD_IMAGE);
}
void addNewMessage(Message m)
{
messages.add(m);
adapter.notifyDataSetChanged();
getListView().setSelection(messages.size()-1);
}
@SuppressWarnings("static-access")
void addReceivedMessage(Message m)
{
messages.add(m);
adapter.notifyDataSetChanged();
getListView().setSelection(messages.size()-1);
v=(Vibrator) getSystemService(this.VIBRATOR_SERVICE);
v.vibrate(200);
}
AwesomeAdapter.java これは、このテキスト ボックスと 9 パッチ イメージをバックグラウンドで表示しているリスト ビューのアダプタ クラスです。
public class AwesomeAdapter は BaseAdapter を拡張します{
private static final int TYPE_ITEM = 0;
private static final int TYPE_SEPARATOR = 1;
private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1;
private Context mContext;
private ArrayList<Message> mMessages;
//private TreeSet mSeparatorsSet = new TreeSet();
public AwesomeAdapter(Context context, ArrayList<Message> messages) {
super();
this.mContext = context;
this.mMessages = messages;
}
@Override
public int getCount() {
return mMessages.size();
}
@Override
public Object getItem(int position) {
return mMessages.get(position);
}
@Override
public int getItemViewType(int position) {
if(my code to get text content) //it will fetch the textview layout
{
return TYPE_SEPARATOR;
}
else //it will fetch the image view layout
{
return TYPE_ITEM;
}
}
@Override
public int getViewTypeCount() {
return TYPE_MAX_COUNT;
}
@SuppressLint("ResourceAsColor")
@SuppressWarnings("deprecation")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Message message = (Message) this.getItem(position);
ViewHolder holder;
int type = getItemViewType(position);
if(convertView == null)
{
holder = new ViewHolder();
switch (type) {
case TYPE_ITEM:
convertView = LayoutInflater.from(mContext).inflate(R.layout.sms_row, parent, false);
holder.message = (TextView) convertView.findViewById(R.id.message_text);
break;
case TYPE_SEPARATOR:
convertView = LayoutInflater.from(mContext).inflate(R.layout.sms_row2, parent, false);
holder.message = (TextView) convertView.findViewById(R.id.message2);
break;
}
convertView.setTag(holder);
}
else
holder = (ViewHolder) convertView.getTag();
holder.message.setText(message.getMessage());
LayoutParams lp = (LayoutParams) holder.message.getLayoutParams();
//check if it is a status message then remove background, and change text color.
if(message.isStatusMessage())
{
holder.message.setBackgroundDrawable(null);
lp.gravity = Gravity.LEFT;
holder.message.setTextColor(R.color.textFieldColor);
}
else
{
//Check whether message is mine to show green background and align to right
if(message.isMine())
{
holder.message.setBackgroundResource(R.drawable.speech_bubble_orange);
lp.gravity = Gravity.LEFT;
}
//If not mine then it is from sender to show orange background and align to left
else
{
holder.message.setBackgroundResource(R.drawable.speech_bubble_green);
lp.gravity = Gravity.RIGHT;
}
holder.message.setLayoutParams(lp);
holder.message.setTextColor(R.color.textColor);
}
return convertView;
}
private static class ViewHolder
{
TextView message;
}
@Override
public long getItemId(int position) {
//Unimplemented, because we aren't using Sqlite.
return 0;
}
}
sms_row1 および sms_row2 ファイルを作成しました。この別のビューの作業を開始するにはどうすればよいですか。Android を初めて使用するので、多くの変更を試みましたが、まだ機能しません。事前に助けてください。