Hey folks!
Fair Warning: I am EXTREMELY new to programming in general, not to mention java and android, so to be brutally honest I probably don't even know how to ask the right questions in the right way. Therefore I appreciate any of you who are willing to take the time to look this over and help if you can! Also if you can find a way to dumb down any solutions you have and explain it like I am a three year old I'd also be very thankful. I've looked over on developer.android.com and all the technical terms are making it worse when it comes to my confusion.
So what I've done so far is;
I have the following codes below (both java and xml) for an app that once it opens it displays the three 'categories' of my app (that are activities.java files) on the activity_main.xml file. Since all three are the same for now I've posted the code for MidlandsActivity.java below.
OnClick it opens whichever activity category you clicked and displays an arraylist (as seen in the MidlandsActivity.java file) of information on the list_items.xml file.
So now... What I want to be able to do is:
I want you to be able to click on any item on the list (which you currently can but it does nothing at the moment) then display whichever list item you clicked in a new activity (I guess right? Well call that one ListDetails.java for the sake of converstation but which i havent made yet because I'm lost. Or should it be coded into the MidlandsActivity.java and each additional category activity for example?). Then have that activity display to the list_details.xml file for full viewing of the data in the selected category arraylist.
Currently I do have the xml file (list_details.xml) set up for this but I just dont know what i need to do next or where to put it.
Any help or suggestions?
Java Files
MidlandsActivity.java
package com.example.android.hauntedsc;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import java.util.ArrayList;
public class MidlandsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.word_list);
//Create an array of words
final ArrayList<Word> words = new ArrayList<Word>();
words.add(new Word(
"title",
"address\n" +
"citystatezip\n\n",
"The Facts:\n\n" +
"factstext\n\n" +
"The Legend:\n\n" +
"legendtext",
R.drawable.haunted));
words.add(new Word(
"title",
"address\n" +
"citystatezip\n\n",
"The Facts:\n\n" +
"factstext\n\n" +
"The Legend:\n\n" +
"legendtext",
R.drawable.haunted));
words.add(new Word(
"title",
"address\n" +
"citystatezip\n\n",
"The Facts:\n\n" +
"factstext\n\n" +
"The Legend:\n\n" +
"legendtext",
R.drawable.haunted));
words.add(new Word(
"title",
"address\n" +
"citystatezip\n\n",
"The Facts:\n\n" +
"factstext\n\n" +
"The Legend:\n\n" +
"legendtext",
R.drawable.haunted));
words.add(new Word(
"title",
"address\n" +
"citystatezip\n\n",
"The Facts:\n\n" +
"factstext\n\n" +
"The Legend:\n\n" +
"legendtext",
R.drawable.haunted));
words.add(new Word(
"title",
"address\n" +
"citystatezip\n\n",
"The Facts:\n\n" +
"factstext\n\n" +
"The Legend:\n\n" +
"legendtext",
R.drawable.haunted));
words.add(new Word(
"title",
"address\n" +
"citystatezip\n\n",
"The Facts:\n\n" +
"factstext\n\n" +
"The Legend:\n\n" +
"legendtext",
R.drawable.haunted));
words.add(new Word(
"title",
"address\n" +
"citystatezip\n\n",
"The Facts:\n\n" +
"factstext\n\n" +
"The Legend:\n\n" +
"legendtext",
R.drawable.haunted));
// Create an {@link ArrayAdapter}, whose data source is a list of Strings. The
// adapter knows how to create layouts for each item in the list, using the
// simple_list_item_1.xml layout resource defined in the Android framework.
// This list item layout contains a single {@link TextView}, which the adapter will set to
// display a single word.
WordAdapter adapter =
new WordAdapter(this, words, R.color.category_midlands);
// Find the {@link ListView} object in the view hierarchy of the {@link Activity}.
// There should be a {@link ListView} with the view ID called list, which is declared in the
// word_list.xml file.
ListView listView = (ListView) findViewById(R.id.list);
// Make the {@link ListView} use the {@link ArrayAdapter} we created above, so that the
// {@link ListView} will display list items for each word in the list of words.
// Do this by calling the setAdapter method on the {@link ListView} object and pass in
// 1 argument, which is the {@link ArrayAdapter} with the variable name itemsAdapter.
listView.setAdapter(adapter);
// Set a click listener to play the audio when the list item is clicked on
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
// Get the {@link Word} object at the given position the user clicked on
Word word = words.get(position);
}
});
}
}
MainActivity.java
package com.example.android.hauntedsc;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the content of the activity to use the activity_main.xml layout file
setContentView(R.layout.activity_main);
//Find the View that shows the lowcountry catagory
TextView lowcountry = (TextView)findViewById(R.id.lowcountry);
//set a clicklistener on that View
lowcountry.setOnClickListener(new View.OnClickListener() {
// The code in this method will be executed when the numbers category is clicked on.
@Override
public void onClick(View view) {
//Create a new intent to open the (@Link LowcountryActivity)
Intent lowcountryIntent = new Intent(MainActivity.this,LowcountryActivity.class);
//Start New Activity
startActivity(lowcountryIntent);
}
});
//Find the View that shows the upstate catagory
TextView upstate = (TextView)findViewById(R.id.upstate);
//set a clicklistener on that View
upstate.setOnClickListener(new View.OnClickListener() {
// The code in this method will be executed when the numbers category is clicked on.
@Override
public void onClick(View view) {
//Create a new intent to open the (@Link UpstateActivity)
Intent upstateIntent = new Intent(MainActivity.this,UpstateActivity.class);
//Start New Activity
startActivity(upstateIntent);
}
});
//Find the View that shows the midlands catagory
TextView midlands = (TextView)findViewById(R.id.midlands);
//set a clicklistener on that View
midlands.setOnClickListener(new View.OnClickListener() {
// The code in this method will be executed when the numbers category is clicked on.
@Override
public void onClick(View view) {
//Create a new intent to open the (@Link midlandsActivity)
Intent midlandsIntent = new Intent(MainActivity.this,MidlandsActivity.class);
//Start New Activity
startActivity(midlandsIntent);
}
});
}
}
Word.java
package com.example.android.hauntedsc;
public class Word {
//
private String mDescription;
//
private String mAddress;
//
private String mTitle;
/** Image resource ID for the word */
private int mImageResourceId = NO_IMAGE_PROVIDED;
/** Constant value that represents no image was provided for this word */
private static final int NO_IMAGE_PROVIDED = -1;
public Word(String description, String address, String title) {
mDescription = description;
mAddress = address;
mTitle = title;
}
public Word(String description, String address, String title, int imageResourceId) {
mDescription = description;
mAddress = address;
mTitle = title;
mImageResourceId = imageResourceId;
}
//Get the description of the list item.
public String getdescription() { return mDescription;}
//Get the address of the list item.
public String getaddress() { return mAddress; }
//Get the title of the list item.
public String gettitle() { return mTitle; }
//Return the image resource ID of the list item.
public int getImageResourceId() { return mImageResourceId; }
//Returns whether or not there is an image for this list item.
public boolean hasImage() { return mImageResourceId != NO_IMAGE_PROVIDED; }
}
WordAdapter.java
package com.example.android.hauntedsc;
import android.content.Context;
import android.support.v4.content.ContextCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class WordAdapter extends ArrayAdapter<Word> {
//Resource ID for background color of this list of words
private int mColorResourceId;
// Here, we initialize the ArrayAdapter's internal storage for the context and the list.
// the second argument is used when the ArrayAdapter is populating a single TextView.
// Because this is a custom adapter for two TextViews and an ImageView, the adapter is not
// going to use this second argument, so it can be any value. Here, we used 0.
public WordAdapter(Context context, ArrayList<Word> words, int colorResourceId) {
super(context, 0, words);
mColorResourceId = colorResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Check if the existing view is being reused, otherwise inflate the view
View listItemView = convertView;
if(listItemView == null) {
listItemView = LayoutInflater.from(getContext()).inflate(
R.layout.list_item, parent, false);
}
// Get the {@link AndroidFlavor} object located at this position in the list
Word currentWord = getItem(position);
// Find the TextView in the list_item.xml layout with the ID version_name
TextView titleTextView = (TextView) listItemView.findViewById(R.id.description_text_view);
// Get the version name from the current AndroidFlavor object and
// set this text on the name TextView
titleTextView.setText(currentWord.gettitle());
// Find the TextView in the list_item.xml layout with the ID version_number
TextView addressTextView = (TextView) listItemView.findViewById(R.id.address_text_view);
// Get the version number from the current AndroidFlavor object and
// set this text on the number TextView
addressTextView.setText(currentWord.getaddress());
// Find the TextView in the list_item.xml layout with the ID version_number
TextView descriptionTextView = (TextView) listItemView.findViewById(R.id.title_text_view);
// Get the version number from the current AndroidFlavor object and
// set this text on the number TextView
descriptionTextView.setText(currentWord.getdescription());
// Find the ImageView in the list_item.xml layout with the ID image.
ImageView imageView = (ImageView) listItemView.findViewById(R.id.image_view);
// Check if an image is provided for this word or not
if (currentWord.hasImage()) {
// If an image is available, display the provided image based on the resource ID
imageView.setImageResource(currentWord.getImageResourceId());
// Make sure the view is visible
imageView.setVisibility(View.VISIBLE);
} else {
// Otherwise hide the ImageView (set visibility to GONE)
imageView.setVisibility(View.GONE);
}
//Set the theme color for the list item
View textContainer = listItemView.findViewById(R.id.text_container);
//find the color that the resource ID maps too
int color = ContextCompat.getColor(getContext(), mColorResourceId);
//Set the background color of the text container View
textContainer.setBackgroundColor(color);
//Set the theme color for the list item
View imageContainer = listItemView.findViewById(R.id.list_item_layout);
//find the color that the resource ID maps too
int icolor = ContextCompat.getColor(getContext(), mColorResourceId);
//Set the background color of the text container View
imageContainer.setBackgroundColor(icolor);
// Return the whole list item layout (containing 2 TextViews and an ImageView)
// so that it can be shown in the ListView
return listItemView;
}
}
XML Files
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
android:orientation="vertical"
tools:context="com.example.android.hauntedsc.MainActivity">
<!-- Lowcountry category ((formerly numbers))-->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/category_lowcountry">
<TextView
android:id="@+id/lowcountry"
style="@style/CategoryStyle"
android:background="?android:attr/selectableItemBackground"
android:text="@string/category_lowcountry" />
</FrameLayout>
<!-- Midlands category ((formerly family))-->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/category_midlands">
<TextView
android:id="@+id/midlands"
style="@style/CategoryStyle"
android:background="?android:attr/selectableItemBackground"
android:text="@string/category_midlands" />
</FrameLayout>
<!-- Upstate category ((formerly colors))-->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/category_upstate">
<TextView
android:id="@+id/upstate"
style="@style/CategoryStyle"
android:background="?android:attr/selectableItemBackground"
android:text="@string/category_upstate" />
</FrameLayout>
</LinearLayout>
list_items.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/list_item_layout"
android:layout_width="match_parent"
android:layout_height="@dimen/list_item_height"
android:background="@color/background"
android:orientation="horizontal">
<ImageView
android:id="@+id/image_view"
android:layout_width="@dimen/list_item_height"
android:layout_height="@dimen/list_item_height"/>
<LinearLayout
android:id="@+id/text_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_toRightOf="@id/image_view"
android:orientation="vertical"
android:paddingLeft="16dp">
<TextView
android:id="@+id/title_text_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:gravity="center_vertical"
android:layout_weight="1"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="@android:color/white"
android:textStyle="bold"
android:paddingTop="4dp"
android:paddingRight="8dp"
android:paddingBottom="4dp"
tools:text=""/>
<TextView
android:id="@+id/address_text_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:gravity="center_vertical"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="@android:color/white"
android:paddingTop="4dp"
android:paddingRight="8dp"
android:paddingBottom="4dp"
tools:text="" />
<TextView
android:id="@+id/description_text_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0"
android:gravity="top"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="@android:color/white"
android:paddingTop="4dp"
android:paddingRight="8dp"
android:paddingBottom="4dp"
tools:text="" />
</LinearLayout>
</RelativeLayout>
list_details.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/detail_title_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="@android:color/white"
android:textStyle="bold"
android:paddingTop="4dp"
android:paddingRight="8dp"
android:paddingBottom="4dp"/>
<TextView
android:id="@+id/detail_address_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="@android:color/white"
android:paddingTop="4dp"
android:paddingRight="8dp"
android:paddingBottom="4dp"/>
<TextView
android:id="@+id/detail_description_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="@android:color/white"
android:paddingTop="4dp"
android:paddingRight="8dp"
android:paddingBottom="4dp"/>
</LinearLayout>
</RelativeLayout>
</ScrollView>