Ich bin ein Anfänger bei Android/Java. Grundsätzlich möchte ich meine XML-Daten in einem ListView anzeigen, aber wenn ich die App starte, wird das ListView überhaupt nicht angezeigt. Ich schätze, ich muss etwas falsch gemacht haben für die ListView, aber ich kann einfach nicht herausfinden, was. Also hier ist mein QuellcodeListView wird nicht angezeigt - Leerer Bildschirm
Ich weiß, dass mein Code ein wenig und unorganisiert ist. Ich arbeite daran.
content_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.azrie.dummyvoice.MainActivity"
tools:showIn="@layout/app_bar_main">
<ListView
android:id="@+id/list_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ListView>
</RelativeLayout>
activity_listview.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1">
<TextView
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/title_text"
android:layout_weight="0.09" />
<TextView
android:layout_width="80dp"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Small Text"
android:id="@+id/date_text"
android:layout_gravity="right"
android:layout_weight="0.05" />
</LinearLayout>
MainActivity.java (onCreate)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
listView = (ListView) findViewById(R.id.list_item);
//new ReadRSS(this,"http://www.thestar.com.my/rss/editors-choice/main/").execute();
//new ReadRSS(this,"http://www.sciencemag.org/rss/news_current.xml").execute();
//new ReadRSS(this,"https://www.androidpit.com/feed/main.xml").execute();
new ReadRSS(this, listView, "http://malaysiakini.com/en/news.rss").execute();
}
ReadRSS.java
public class ReadRSS extends AsyncTask<Void, Void, Void> {
//Initialize progress dialog
Context context;
String address;
ProgressDialog progressDialog;
XmlPullParserFactory xmlPullParserFactory;
volatile boolean parsingComplete = true;
ArrayList<FeedItem> feedItems = new ArrayList<>();
ListView listView;
public ReadRSS(Context context, ListView listView, String retrieveAddress) {
//Create a new progress dialog
this.listView = listView;
this.address = retrieveAddress;
this.context = context;
progressDialog = new ProgressDialog(context);
progressDialog.setMessage("Loading....");
}
// Runs in UI before background thread is called
@Override
protected void onPreExecute() {
//Display progress dialog
progressDialog.show();
super.onPreExecute();
}
// This is run in a background thread
@Override
protected Void doInBackground(Void... voids) {
fetchXML();
return null;
}
// This is called from background thread but runs in UI
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
// This runs in UI when background thread finishes
@Override
protected void onPostExecute(Void aVoid) {
//Dismiss progress dialog
super.onPostExecute(aVoid);
progressDialog.dismiss(); if(listView!=null) {
MyAdapter adapter = new MyAdapter(context,feedItems);
listView.setAdapter(adapter);
}
}
public void parseXMLAndStoreIt(XmlPullParser myParser) {
int event;
String text=null;
try {
event = myParser.getEventType();
FeedItem item = new FeedItem();
while (event != XmlPullParser.END_DOCUMENT) {
String tagName = myParser.getName();
switch (event){
case XmlPullParser.START_TAG:
if(tagName.equalsIgnoreCase("item")){
int eventChild = myParser.next();
while(eventChild != XmlPullParser.END_DOCUMENT){
String tagNameChild = myParser.getName();
switch (eventChild){
case XmlPullParser.START_TAG:
break;
case XmlPullParser.TEXT:
text = myParser.getText();
break;
case XmlPullParser.END_TAG:
if(tagNameChild.equalsIgnoreCase("title")){
item.setTitle(text);
}
else if(tagNameChild.equalsIgnoreCase("link")){
item.setLink(text);
}
else if(tagNameChild.equalsIgnoreCase("description")){
String plain = Html.fromHtml(text).toString();
//stripHtml(text);
item.setDescription(plain);item.getDescription());
}
else if(tagNameChild.equalsIgnoreCase("pubDate")){
item.setPubDate(text); //Log.d("pudDate",text);
}
else if(tagNameChild.equalsIgnoreCase("media:thumbnail") || tagNameChild.equalsIgnoreCase("media:content") || tagName.equalsIgnoreCase("enclosure")){
if(myParser.getAttributeValue(null,"url") != null) {
item.setThumbnailUrl(text);item.getThumbnailUrl());
//Log.d("ItemThumbnailUrl",myParser.getAttributeValue(null,"url"));
}
}
else if(tagNameChild.equalsIgnoreCase("item")){
}
break;
}
}
}
break;
case XmlPullParser.TEXT:
break;
case XmlPullParser.END_TAG:
break;
}
event = myParser.next();
}
parsingComplete = false;
}
catch (Exception e) {
e.printStackTrace();
}
}
public void fetchXML(){
Thread thread = new Thread(new Runnable(){
@Override
public void run() {
try {
URL url = new URL(address);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("GET");
conn.setDoInput(true);
// Starts the query
conn.connect();
InputStream stream = conn.getInputStream();
xmlPullParserFactory = XmlPullParserFactory.newInstance();
XmlPullParser myparser = xmlPullParserFactory.newPullParser();
myparser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
myparser.setInput(stream, null);
parseXMLAndStoreIt(myparser);
stream.close();
}
catch (Exception e) {
}
}
});
thread.start();
}
}
MyAdapter.java
public class MyAdapter extends BaseAdapter {
Context context;
ArrayList<FeedItem> feedItems;
LayoutInflater inflater = null;
public MyAdapter(Context context, ArrayList<FeedItem> feedItems){
this.context = context;
this.feedItems = feedItems;
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return feedItems.size();
}
@Override
public Object getItem(int i) {
return i;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder;
if (view == null) {
viewHolder = new ViewHolder();
view = inflater.inflate(R.layout.activity_listview, viewGroup, false);
viewHolder.text_title = (TextView) view.findViewById(R.id.title_text);
viewHolder.text_date = (TextView) view.findViewById(R.id.date_text);
view.setTag(viewHolder);
}
else{
viewHolder = (ViewHolder) view.getTag();
}
FeedItem objFeed = feedItems.get(i);
viewHolder.text_title.setText(objFeed.getTitle());
viewHolder.text_date.setText(objFeed.getPubDate());
return view;
}
static class ViewHolder{
TextView text_title;
TextView text_date;
}
}
ListView ist leer, weil Sie irgendeinen Adapter darauf gesetzt haben .. via listView.setAdapter() – W0rmH0le
Erster Fehler: Sie haben 'weightsum = 1' in' activity_listview.xml' definiert und die tatsächliche Summe seiner Kinder beträgt '0,09 + 0,05 = 0,14 ', was ungleich "1" ist. – Apurva