0

我正在创建一个 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 个补丁图像,

公共类 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 文件,现在我应该如何开始另一个 View 的工作,我是 android 新手尝试了很多更改,但它仍然不起作用,请提前帮助和thanx。

4

1 回答 1

0

我的朋友,在我看来。解决方案是拥有一个带有 image 和 textView 以及第三个布尔变量的自定义适配器。

    private Context mContext;
    private ArrayList<Message> mMessages;
    private boolean isText;

 //private TreeSet mSeparatorsSet = new TreeSet();

    public AwesomeAdapter(Context context, ArrayList<Message> messages, boolean isText) {
       super();
       this.mContext = context;
       this.mMessages = messages;
       this.isText = isText;
   }

而这个“isText”变量将决定是显示文本还是显示图像。我希望它会起作用:)

于 2013-06-23T11:09:23.430 回答