i made a custom animation a sliding menu (like fb) and i have to insert a listview in the sublayout. But the listview is in a different class which is parsed through json using a lazyadapter.
This is my MainActivity
package com.android.appslu;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.android.appslu.jsonparsing.JSONParsingActivity;
public class MainActivity extends Activity {
private Button buttonSwitch;
private Button button1;
private View subLayout;
private View topLayout;
private ListView mylist;
private String ArrayList; // ={"Android","iPhone","BlackBerry","AndroidPeople"};
private Display display;
private View fakeLayout;
private AnimationListener AL;
// Values for after the animation
private int oldLeft;
private int oldTop;
private int newleft;
private int newTop;
private int screenWidth;
private int animToPostion;
// TODO change the name of the animToPostion for a better explanation.
private boolean menuOpen = false;
/** Called when the activity is first created. */
@SuppressLint("ResourceAsColor")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonSwitch = (Button) findViewById(R.id.button);
button1 = (Button) findViewById(R.id.button1);
subLayout = findViewById(R.id.layout);
topLayout = findViewById(R.id.layoutTwo);
mylist = (ListView) findViewById(R.layout.list_item);
fakeLayout = findViewById(R.id.fake_layouy);
// TextView yourTextView = (TextView)findViewById(titleId);
// yourTextView.setHighlightColor(R.color.red);
// subViewListView.setAdapter((ListAdapter) new
// ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 ,
// ArrayList));
// ListAdapter adapter = new SimpleAdapter(this,
// mylist,R.layout.list_item, new String[]{TAG_NAME,TAG_URL}, new
// int[]{R.id.name, R.id.url});
display = getWindowManager().getDefaultDisplay();
screenWidth = display.getWidth();
int calcAnimationPosition = (screenWidth / 3);
// Value where the onTop Layer has to animate
// also the max width of the layout underneath
// Set Layout params for subLayout according to calculation
animToPostion = screenWidth - calcAnimationPosition;
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
animToPostion, LayoutParams.FILL_PARENT);
subLayout.setLayoutParams(params);
topLayout.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (menuOpen == true) {
animSlideLeft();
}
}
return false;
}
});
buttonSwitch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (menuOpen == false) {
animSlideRight();
} else if (menuOpen == true) {
animSlideLeft();
}
}
});
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent newIntent = new Intent(MainActivity.this, JSONParsingActivity.class);
startActivity(newIntent);
}
});
AL = new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
buttonSwitch.setClickable(false);
topLayout.setEnabled(false);
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation animation) {
if (menuOpen == true) {
Log.d("", "Open");
topLayout.layout(oldLeft, oldTop,
oldLeft + topLayout.getMeasuredWidth(), oldTop
+ topLayout.getMeasuredHeight());
menuOpen = false;
buttonSwitch.setClickable(true);
topLayout.setEnabled(true);
} else if (menuOpen == false) {
Log.d("", "FALSE");
topLayout.layout(newleft, newTop,
newleft + topLayout.getMeasuredWidth(), newTop
+ topLayout.getMeasuredHeight());
topLayout.setEnabled(true);
menuOpen = true;
buttonSwitch.setClickable(true);
}
}
};
}
public void animSlideRight() {
fakeLayout.setVisibility(View.VISIBLE);
newleft = topLayout.getLeft() + animToPostion;
newTop = topLayout.getTop();
TranslateAnimation slideRight = new TranslateAnimation(0, newleft, 0, 0);
slideRight.setDuration(500);
slideRight.setFillEnabled(true);
slideRight.setAnimationListener(AL);
topLayout.startAnimation(slideRight);
}
public void animSlideLeft() {
fakeLayout.setVisibility(View.GONE);
oldLeft = topLayout.getLeft() - animToPostion;
oldTop = topLayout.getTop();
TranslateAnimation slideLeft = new TranslateAnimation(newleft, oldLeft,
0, 0);
slideLeft.setDuration(500);
slideLeft.setFillEnabled(true);
slideLeft.setAnimationListener(AL);
topLayout.startAnimation(slideLeft);
}
}`
The JSONParsingActivity is
package com.android.appslu.jsonparsing;
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.android.appslu.MainActivity;
import com.android.appslu.R;
public class JSONParsingActivity extends ListActivity {
private static String url = "http:EXAMPLE.COM";
// JSON Node names
private static final String TAG_CONTACTS = "Categories";
private static final String TAG_CATBOOK = "BuzzByappcategory";
private static final String TAG_APPS = "BuzzBysource";
static final String TAG_NAME = "CatName";
private static final String TAG_ID = "CatId";
static final String TAG_EMAIL = "CatIcon";
//private static final String TAG_PHONE_HOME = "home";
// private static final String TAG_PHONE_OFFICE = "office";
Bitmap image;
// contacts JSONArray
JSONObject catlist = null;
JSONArray catbook = null;
JSONArray catapps = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_item);
// Hashmap for ListView
ArrayList<HashMap<String, String>> catList = new ArrayList<HashMap<String, String>>();
// Creating JSON Parser instance
Jparser jParser = new Jparser();
// getting JSON string from URL
JSONObject json = jParser.getJSONfromUrl(url);
try {
// Getting Array of Contacts
catlist = json.getJSONObject(TAG_CONTACTS);
catbook = catlist.getJSONArray(TAG_CATBOOK);
// looping through All Contacts
for(int i = 0; i < catbook.length(); i++){
JSONObject c = catbook.getJSONObject(i);
// Storing each json item in variable
String id = c.getString(TAG_ID);
String name = c.getString(TAG_NAME);
String email = c.getString(TAG_EMAIL);
// String address = c.getString(TAG_ADDRESS);
// String gender = c.getString(TAG_GENDER);
// Phone number is agin JSON Object
// JSONObject phone = c.getJSONObject(TAG_PHONE);
// String mobile = phone.getString(TAG_PHONE_MOBILE);
// String home = phone.getString(TAG_PHONE_HOME);
// String office = phone.getString(TAG_PHONE_OFFICE);
//
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_ID, id);
map.put(TAG_NAME, name);
map.put(TAG_EMAIL, email);
// map.put(TAG_PHONE_MOBILE, mobile);
// adding HashList to ArrayList
catList.add(map);
}
catapps = catlist.getJSONArray(TAG_APPS);
// looping through All Contacts
for(int i = 0; i < catapps.length(); i++){
JSONObject c = catapps.getJSONObject(i);
// Storing each json item in variable
String id = c.getString(TAG_ID);
String name = c.getString(TAG_NAME);
String email = c.getString(TAG_EMAIL);
// String address = c.getString(TAG_ADDRESS);
// String gender = c.getString(TAG_GENDER);
// Phone number is agin JSON dObject
// JSONObject phone = c.getJSONObject(TAG_PHONE);
// String mobile = phone.getString(TAG_PHONE_MOBILE);
// String home = phone.getString(TAG_PHONE_HOME);
// String office = phone.getString(TAG_PHONE_OFFICE);
//
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_ID, id);
map.put(TAG_NAME, name);
map.put(TAG_EMAIL, email);
// map.put(TAG_PHONE_MOBILE, mobile);
// adding HashList to ArrayList
catList.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new LazyAdapter(this, catList);
setListAdapter(adapter);
// selecting single ListView item
ListView lv = getListView();
// Launching new screen on Selecting Single ListItem
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting values from selected ListItem
String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
String cost = ((ImageView) view.findViewById(R.id.email)).getTag().toString();
// String description = ((TextView) view.findViewById(R.id.mobile)).getText().toString();
// Starting new intent
Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
in.putExtra(TAG_NAME, name);
in.putExtra(TAG_EMAIL, cost);
//in.putExtra(TAG_PHONE_MOBILE, description);
startActivity(in);
}
});
// Intent i=new Intent(JSONParsingActivity.this,MainActivity.class);
// i.putStringArrayListExtra("key",arl);
// startActivity(i);
//
}
}
And the xml for main activity is
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<SurfaceView
android:id="@+id/surfaceView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<RelativeLayout
android:id="@+id/layout"
android:layout_width="220dp"
android:layout_height="fill_parent"
android:background="#ffffff"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/fake_layouy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone" >
</LinearLayout>
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/name_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ImageView android:id="@+id/email_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</ListView>
</RelativeLayout>
<RelativeLayout
android:id="@+id/layoutTwo"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/scrollback"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_margin="2dp"
android:orientation="vertical" >
<ListView
android:id="@+id/layoutThree"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/button" >
</ListView>
<Button
android:id="@+id/button"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:text="slide" />
</LinearLayout>
</RelativeLayout>
My question is how to display the listview from JSONParsingActivity in the sublayout of MainActivity.
Im new to android programming.... Plz help..
Thanks in advance..
Extend your JSONParsingActivity
with ListFragment. Load JSONParsingActivity
in your main Activity.
Updated with Code
FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
You can then add a fragment using the add() method, specifying the fragment to add and the view in which to insert it.
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
Please refer this link ,everything about fragment is explained here.
This is the way you can set UserInterface in fragment. Solution for First one 1.
public static class ExampleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.example_fragment, container, false);
}
}
Solution for Second problem.
LazyAdapter(getActivity(), ArrayList<HashMap<String,String>>)