gpt4 book ai didi

java - 仅在添加 WebView 和 TextView 时才在 LinearLayout 中动态创建 WebView 和 TextView

转载 作者:行者123 更新时间:2023-12-01 23:26:26 24 4
gpt4 key购买 nike

我正在尝试在 ScrollView (如新闻提要)内的线性 View 中动态创建 Web View 和文本区域。不确定这是否是最好的方法,但基本上我想动态加载 json 项目并在新闻提要中呈现。当我的代码运行时,它只呈现一项,我不确定为什么它不创建所有项目。

我正在学习android,试图找出如何动态检索和显示本质上是墙式提要的数据。

当我尝试在 ScrollView 内的线性 View 内创建 WebView 或 TextView 时,我遇到了问题,它要么在循环时覆盖现有对象,要么所有内容都位于其自身之上。老实说,我不太确定,我对 Android 开发非常陌生。

摘要:

问题 1:此代码不会创建动态元素并将它们堆叠在 ScrollView 内,以便我可以滚动它们。问题 2:如何为每个项目设置默认大小,以便它们在 ScrollView 中具有相同的大小?问题 3:我使用的模拟设备无法访问互联网。我正在使用代理循环回我的 PC 到正在运行的返回 json 字符串的本地 api。当它们是链接时,它无法加载 YouTube 嵌入,我也无法在浏览器中加载。

感谢任何帮助。

示例 json

{
"4006": {
"owner": "freedomhard",
"post_data": "Cheers.",
"time": 1570588719
},
"4009": {
"owner": "Kcreichen",
"post_data": "Good night 😊",
"time": 1570589506
},
"4011": {
"owner": "Jpowers40828",
"post_data": "Instead people revere them as celebrities and impressive.",
"time": 1570590300
},
"4024": {
"owner": "NorthernMich",
"post_data": "https://www.youtube.com/embed/R6E1H82DqHE",
"time": 1570593697
},
"4027": {
"owner": "DvlDog17",
"post_data": "🤘🤘\r\n\r\nhttps://youtu.be/ptro0vwRMaA",
"time": 1570595894
},
"4037": {
"owner": "617Dan",
"post_data": "https://www.facebook.com/1230804746996245/posts/2530952203648153?sfns=mo\r\n\r\n\r\nCame across this little bit this morning, sums it up quite nicely",
"time": 1570617231
},
"4045": {
"owner": "billyd1431",
"post_data": "https://www.lovedreamer.com/Sophia-Rossi-Big-Boob-Doll",
"time": 1570625995
},
"4047": {
"owner": "txangelnjs",
"post_data": "Good morning y'all!!",
"time": 1570626060
},
"4048": {
"owner": "freedomhard",
"post_data": "Hello you sexy mother fuckers.",
"time": 1570626409
},
"4052": {
"owner": "Jpowers40828",
"post_data": "It\ufffds because he\ufffds not a conservative, he\ufffds a liberal who doesn\ufffdt respect the 2nd amendment and loves social programs (look at bailout programs). \r\nhttps://www.newsweek.com/trump-deficit-debt-cbo-data-obama-1463802",
"time": 1570628450
},
"4053": {
"owner": "Otterbox92",
"post_data": "Celebrating three years sober from alcohol today! 🙂 looking back, I\ufffdm thankful and blessed that I got that DUI. It completely changed me and I haven\ufffdt had a sip since that night.",
"time": 1570628462
}
}

content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main">

<ScrollView
android:id="@+id/news_update"
android:layout_width="409dp"
android:layout_height="673dp"
android:layout_marginEnd="1dp"
android:layout_marginRight="1dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent">

<LinearLayout
android:id="@+id/content_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginBottom="60dp">


</LinearLayout>


</ScrollView>



</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java

package com.example.freedomhard_test;

import android.os.Bundle;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

import android.os.Bundle;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import android.util.Log;
import android.widget.TextView;

import org.json.JSONObject.*;
import org.json.JSONObject;
import org.json.JSONException;
import java.util.Iterator;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.view.ViewGroup.LayoutParams;
import android.util.Base64;

public class MainActivity extends AppCompatActivity {
TextView newtext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);


OkHttpClient client = new OkHttpClient();

setContentView(R.layout.activity_main);
String url = "http://10.0.2.3";

Request request = new Request.Builder()
.url(url)
.build();

client.newCall(request).enqueue(new Callback() {
public void onFailure(Call call, IOException e) {
final String stack_trace = e.toString();
TextView newtextz = (TextView) findViewById(R.id.content);
newtextz.setText(stack_trace);
e.printStackTrace();
}

public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
final String myResponse = response.body().string();
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
LinearLayout relativeLayout = (LinearLayout) findViewById(R.id.content_view);
LayoutParams lparams = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

JSONObject mainObject = new JSONObject();
try {
mainObject = new JSONObject(myResponse);
System.out.println(mainObject);

} catch (JSONException e) {
//some exception handler code.
}finally {
if(mainObject != null){
Iterator<String> iter = mainObject.keys();
while (iter.hasNext()) {
String key = iter.next();
try {
JSONObject value = mainObject.getJSONObject(key);
String post_data = value.getString("post_data");
String user = value.getString("owner");
String time = value.getString("time");
String new_text = "\n" + user + " - " + post_data + " - " + time;
if(post_data.contains("youtube")){

TextView newTxt = new TextView(MainActivity.this);
newTxt.setText(new_text);
relativeLayout.addView(newTxt);

WebView webView = new WebView(MainActivity.this);
webView.setWebViewClient(new WebViewClient());

String unencodedHtml =
"<iframe width='560' height='315' src='https://www.youtube.com/embed/GAdGmJxfcf8' frameborder='0' allow='accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture' allowfullscreen></iframe>";
String encodedHtml = Base64.encodeToString(unencodedHtml.getBytes(),
Base64.NO_PADDING);
webView.loadData(encodedHtml, "text/html", "base64");
webView.setLayoutParams(lparams);
relativeLayout.addView(webView);
}else{
TextView newTxt = new TextView(MainActivity.this);

newTxt.setLayoutParams(lparams);
newTxt.setText(new_text);
}

//newtext.setText(new_text);

} catch (JSONException e) {
// Something went wrong!
}
}
}
}
}
});
}
}



});

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.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();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}

最佳答案

第一:您应该使用 RecyclerView 来代替创建此 View 。

现在,如果您确实想以这种方式以编程方式创建 View ,那么您应该这样做。

WebView wv = new WebView(context);
TextView tv = new TextView(context);

LinearLayout.LayoutParams params = new
LinearLayout.LayoutParams(ViewWidth,ViewHight);
params./*add required params here*/;
wv.setLayoutParams(params);
tv.setLayoutParams(params);


/*you should take care of hierarchy adding view depending on your layout
orientation*/
YourLinearLayoutToAddView.addView(wv);
YourLinearLayoutToAddView.addView(tv);

关于java - 仅在添加 WebView 和 TextView 时才在 LinearLayout 中动态创建 WebView 和 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58305891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com