Javascript 如何在recyclerView Android中管理显示数据
我有一个Javascript 如何在recyclerView Android中管理显示数据,javascript,android,android-recyclerview,Javascript,Android,Android Recyclerview,我有一个webView,其中有三个组件来自html文件。我希望应用程序在单击按钮后发送短信,并在recyclerView中显示消息日志 因此,sms将正确发送,但在recyclerView中没有显示任何内容 资产中的message.html <!DOCTYPE html> <html lang="en"> <head> <script type="text/javascript"> funct
webView
,其中有三个组件来自html
文件。我希望应用程序在单击按钮后发送短信,并在recyclerView
中显示消息日志
因此,sms将正确发送,但在recyclerView
中没有显示任何内容
资产中的message.html
<!DOCTYPE html>
<html lang="en">
<head>
<script type="text/javascript">
function sendAndroidMessage() {
phoneNumber = document.getElementById('phoneNumber').value;
messageText = document.getElementById('messageText').value;
Android.sendMessage(phoneNumber, messageText);
}
</script>
</head>
<body>
<input id="phoneNumber" type="tel" placeholder="Enter the Phone Number"/>
<br/>
<br/>
<input id="messageText" type="text" placeholder="Enter Message Content" >
<br/>
<br/>
<input id="sendBtn" type="button" value="Send" onclick="sendAndroidMessage()" >
</body>
</html>
sendSMS():
最后是MainActivity.java:
messageInfo = (WebView)findViewById(R.id.message);
messageInfo.loadUrl("file:///android_asset/message.html");
messageInfo.getSettings().setJavaScriptEnabled(true);
message = new Message();
recyclerView = (RecyclerView)findViewById(R.id.show_message);
messageAdapter = new MessageAdapter(this, messageList);
messageInfo.addJavascriptInterface(new SendMessageInterface(MainActivity.this), "Android");
setMessageAdapter();
setMassageAdapter():
我很困惑,不知道如何修复它,也不知道如何搜索什么,我找到了答案!我把它放在这里,希望对其他人有用。 无需
asyncTask
类或任何东西,只需在发送短信时调用setMessageAdapter
。现在,main活动
是这样的:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkPermission();
messageInfo = (WebView)findViewById(R.id.message);
messageInfo.loadUrl("file:///android_asset/message.html");
messageInfo.getSettings().setJavaScriptEnabled(true);
message = new Message();
recyclerView = (RecyclerView)findViewById(R.id.show_message);
messageAdapter = new MessageAdapter(this, messageList);
messageInfo.addJavascriptInterface(new SendMessageInterface(), "Android");
}
public void checkPermission(){
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.SEND_SMS)
== PackageManager.PERMISSION_DENIED) {
Log.d("permission", "permission denied to SEND_SMS - requesting it");
String[] permissions = {Manifest.permission.SEND_SMS};
requestPermissions(permissions, PERMISSION_REQUEST_CODE);
}
}
}
public class SendMessageInterface {
public SendMessageInterface() {}
@JavascriptInterface
public void sendMessage(String phoneNumber, String messageText) {
message = new Message();
message.setMessageText(messageText);
message.setPhoneNumber(phoneNumber);
sendSMS();
}
}
public void sendSMS(){
String smsBody = message.getMessageText();
String phoneNumber = message.getPhoneNumber();
String SENT = "SMS_SENT";
PendingIntent sentPI = PendingIntent.getBroadcast(MainActivity.this, 0,
new Intent(SENT), 0);
//---when the SMS has been sent---
registerReceiver (new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode())
{
case Activity.RESULT_OK:
message.setMessageSent(true);
Log.e("is sent?1", ": " + message.isMessageSent());
setMessageAdapter();
default:
message.setMessageSent(false);
setMessageAdapter();
}
}
}, new IntentFilter(SENT));
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNumber, null, smsBody, sentPI, null);
dataBase = new DataBase(MainActivity.this);
dataBase.insertSms(phoneNumber, smsBody, message.isMessageSent());
}catch (Exception ex) {
Toast.makeText(MainActivity.this,ex.getMessage().toString(),
Toast.LENGTH_LONG).show();
ex.printStackTrace();
}
}
public void setMessageAdapter(){
messageList.add(message);
recyclerView.setHasFixedSize(false);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(MainActivity.this);
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(messageAdapter);
messageAdapter.notifyDataSetChanged();
}
messageInfo = (WebView)findViewById(R.id.message);
messageInfo.loadUrl("file:///android_asset/message.html");
messageInfo.getSettings().setJavaScriptEnabled(true);
message = new Message();
recyclerView = (RecyclerView)findViewById(R.id.show_message);
messageAdapter = new MessageAdapter(this, messageList);
messageInfo.addJavascriptInterface(new SendMessageInterface(MainActivity.this), "Android");
setMessageAdapter();
messageList.add(message);
recyclerView.setHasFixedSize(false);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(MainActivity.this);
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(messageAdapter);
messageAdapter.notifyDataSetChanged();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkPermission();
messageInfo = (WebView)findViewById(R.id.message);
messageInfo.loadUrl("file:///android_asset/message.html");
messageInfo.getSettings().setJavaScriptEnabled(true);
message = new Message();
recyclerView = (RecyclerView)findViewById(R.id.show_message);
messageAdapter = new MessageAdapter(this, messageList);
messageInfo.addJavascriptInterface(new SendMessageInterface(), "Android");
}
public void checkPermission(){
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.SEND_SMS)
== PackageManager.PERMISSION_DENIED) {
Log.d("permission", "permission denied to SEND_SMS - requesting it");
String[] permissions = {Manifest.permission.SEND_SMS};
requestPermissions(permissions, PERMISSION_REQUEST_CODE);
}
}
}
public class SendMessageInterface {
public SendMessageInterface() {}
@JavascriptInterface
public void sendMessage(String phoneNumber, String messageText) {
message = new Message();
message.setMessageText(messageText);
message.setPhoneNumber(phoneNumber);
sendSMS();
}
}
public void sendSMS(){
String smsBody = message.getMessageText();
String phoneNumber = message.getPhoneNumber();
String SENT = "SMS_SENT";
PendingIntent sentPI = PendingIntent.getBroadcast(MainActivity.this, 0,
new Intent(SENT), 0);
//---when the SMS has been sent---
registerReceiver (new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode())
{
case Activity.RESULT_OK:
message.setMessageSent(true);
Log.e("is sent?1", ": " + message.isMessageSent());
setMessageAdapter();
default:
message.setMessageSent(false);
setMessageAdapter();
}
}
}, new IntentFilter(SENT));
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNumber, null, smsBody, sentPI, null);
dataBase = new DataBase(MainActivity.this);
dataBase.insertSms(phoneNumber, smsBody, message.isMessageSent());
}catch (Exception ex) {
Toast.makeText(MainActivity.this,ex.getMessage().toString(),
Toast.LENGTH_LONG).show();
ex.printStackTrace();
}
}
public void setMessageAdapter(){
messageList.add(message);
recyclerView.setHasFixedSize(false);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(MainActivity.this);
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(messageAdapter);
messageAdapter.notifyDataSetChanged();
}