Android第一行代碼3.7.2

1.聊天界面

在app/build.gradle中添加依賴庫(kù)

?implementation'com.android.support:recyclerview-v7:28.0.0'

修改activity_mian_xml代碼

1.android.support.v7.widget.RecyclerView 的完整包路徑。

定義實(shí)體類Msg? ? ? ? ? ? ? ? ?content表示內(nèi)容 ,type表示類型:發(fā)送,接收。

public class Msg {

public static final int TYPE_RECEIVED=0;

public static final int TYPE_SENT=0;

private Stringcontent;

private int type;

public Msg(String content,int type ){

this.content=content;

this.type=type;

}

public String getContent(){

return content;

}

public int getType(){

return type;

}

}

新建一個(gè)item.xml 為RecyclerVIew的子項(xiàng)

包含兩個(gè)對(duì)話圖片用兩個(gè)(Linearlayout)

創(chuàng)建RecyclerVIew的適配器MsgAdapter

public class MsgAdapterextends RecyclerView.Adapter {

private List<Msg>??mMsglist;

static class ViewHolderextends RecyclerView.ViewHolder{//避免findviewbyid重復(fù)注冊(cè)

LinearLayoutleftLayout;//成員變量

LinearLayoutrightLayout;

TextViewleftmsg;

TextViewrightmsg;

public ViewHolder(View view){//封裝到Viewholder里面

super(view);

leftLayout=(LinearLayout)view.findViewById(R.id.left_layout);

rightLayout=(LinearLayout)view.findViewById(R.id.right_layout);

leftmsg=(TextView)view.findViewById(R.id.left_msg);

rightmsg=(TextView)view.findViewById(R.id.right_msg);

}

}

public MsgAdapter(List<Msg>?msgList){//

mMsglist=msgList;//把要展示的數(shù)據(jù)賦值給全局變量

}

@NonNull

@Override

? ? public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {//oncreate創(chuàng)建Viewholder的實(shí)例

View view=LayoutInflater.from(prent.getContext()).inflate(R.layout.msg_item,parent,false);

return new ViewHolder(view);

}

@Override

? ? public void onBindViewHolder(@NonNull ViewHolder holder,int position) {bin方法是對(duì)子項(xiàng)數(shù)據(jù)賦值

Msg msg=mMsglist.get(position);

if(msg.getType()==Msg.TYPE_RECEIVED){

holder.leftLayout.setVisibility(View.VISIBLE);//顯示

? ? ? ? ? ? holder.rightLayout.setVisibility(View.GONE);//不顯示

? ? ? ? ? ? holder.leftmsg.setText(msg.getContent());

}else if(msg.getType()==Msg.TYPE_SENT){

holder.leftLayout.setVisibility(View.GONE);

holder.rightLayout.setVisibility(View.VISIBLE);

holder.rightmsg.setText(msg.getContent());

}

}

@Override

? ? public int getItemCount() {//告訴我們一共有多少子項(xiàng)

return mMsglist.size();

}

}

最后是MainActivity中的代碼

public class MainActivityextends AppCompatActivity {

private List <Msg>msgList=new ArrayList<>();//泛型類

private EditText? inputText;

private Button? send;

private RecyclerView? msgRecyclerView;

private MsgAdapter adapter;

@Override

? ? protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

inirMsgs();//初始化數(shù)據(jù)

inputText=(EditText)findViewById(R.id.input_text);

send=(Button)findViewById(R.id.send);

msgRecyclerView=(RecyclerView)findViewById(R.id.msg_parent);

LinearLayoutManager layoutManager=new LinearLayoutManager(this);

msgRecyclerView.setAdapter(adapter);//綁定適配器

Log.d("MainActivity" ,"adpter");

send.setOnClickListener(new View.OnClickListener() {

@Override

? ? ? ? ? ? public void onClick(View v) {

String content=inputText.getText().toString();

if(!"".equals(content)){

Msg msg=new Msg(content,Msg.TYPE_SENT);

msgList.add(msg);

adapter.notifyItemInserted(msgList.size()-1);//新數(shù)據(jù)插入

msgRecyclerView.scrollToPosition(msgList.size()-1);//定位到最后一行

inputText.setText("");//清空數(shù)據(jù)

}

Toast.makeText(MainActivity.this,"true",Toast.LENGTH_SHORT).show();

}

});

}

private void inirMsgs(){

Msg msg1=new Msg("1",Msg.TYPE_RECEIVED);

msgList.add(msg1);

Msg msg2=new Msg("2",Msg.TYPE_SENT);

msgList.add(msg2);

Msg msg3=new Msg("3",Msg.TYPE_RECEIVED);

msgList.add(msg3);

}

}

logcat日志顯示錯(cuò)誤:No adapter attached; skipping layout

1.沒(méi)有綁定適配器 setAdpter()已綁定

2.布局設(shè)置成RelativeLayout? ? 沒(méi)有用

3.使用 msgRecyclerView.setLayoutManager(layoutManager);無(wú)用

解決??private MsgAdapter? ?adapter;定義全局變量

MsgAdapter adapter=new MsgAdapter(msgList);//創(chuàng)建adpter的實(shí)例

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容