I'm using Android Studio to make a crypto watcher app, a small school project and I've run into some problems. I want it to look something like this:
CoinMarketCapApp
What should I use to do so?
I was thinking of using ListView, but I don't know how to add multiple String values to one line. I'm using fragments for activities. Any help on those problems is very appreciated!
My code:
HomeFragment.java
package com.example.vartotojas.heycrypto;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.TextView;
import android.support.v4.view.ViewPager;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class HomeFragment extends Fragment {
private static final String TAG = "HomeFragment";
private TextView mTextViewResult;
private RequestQueue mQueue;
public Button refresh
#Nullable
#Override
public View onCreateView(#NonNull LayoutInflater inflater, #Nullable ViewGroup container, #Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.home_fragment, container, false);
return view;
ImageView imageView = (ImageView) getView().findViewById(R.id.coinListView);
Button refresh = getView().findViewById(R.id.refresh);
mQueue = Volley.newRequestQueue(this);
refresh = (Button) inflater.inflate(R.layout.activity_home, container, false).findViewById(R.id.refresh);
refresh.setOnClickListener(this);
}
#Override
public void onClick(View v) {
jsonParse()
}
private void jsonParse(){
String url = "https://api.coinmarketcap.com/v1/ticker/";
JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {
#Override
public void onResponse(JSONArray response) {
for(int i = 0; i < response.length(); i++){
try {
JSONObject coin = response.getJSONObject(i);
String name= coin.getString("name");
String price = coin.getString("price");
String change24 = coin.getString("percent_change_24h");
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}, new Response.ErrorListener() {
#Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
}
}
activity_home.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:id="#+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=". ">
<android.support.design.widget.AppBarLayout
android:id="#+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="#dimen/appbar_padding_top"
android:theme="#style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="#+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_weight="1"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="#style/AppTheme.PopupOverlay"
app:title="#string/app_name">
</android.support.v7.widget.Toolbar>
<android.support.design.widget.TabLayout
android:id="#+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.TabItem
android:id="#+id/tabItem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Price" />
<android.support.design.widget.TabItem
android:id="#+id/tabItem2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Favourite" />
<android.support.design.widget.TabItem
android:id="#+id/tabItem3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Portfolio" />
<android.support.design.widget.TabItem
android:id="#+id/tabItem2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Settings" />
</android.support.design.widget.TabLayout>
<Button
android:id="#+id/refresh"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#9966ff"
android:padding="16dp"
android:text="Refresh" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="#+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="#string/appbar_scrolling_view_behavior" />
<ListView
android:id="#+id/coinListView"
android:layout_marginTop="160dp"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.design.widget.CoordinatorLayout>
Thanks!
Using a ListView would be fine, but you're going to need to create a POJO to use as a model for each listItem.
Use this website to create a good model class for your listItem.
And here's the repo for one of my projects where I used Retrofit to pull data from a Movie database api and populated my recylcerView with data
If you plan on having a very long list of items I would say go with a RecyclerView instead.
Hope this helps!
Related
I've used CoordinatorLayout + AppBarLayout so the Toolbar could disappear while scrolling and to put Recycler View below tablayout. But after I've changed model logic and added child elements in the toolbar this fatal error keeps happening. After changing the root layout to LinearLayout or FrameLayout the error disappears, but I don't get desired behavior.
I don't call, create or change my Layout params for AppBarLayout and CoordinatorLayout in the code (MainActivity). So the stack trace does not show me any internal lines of code, just the internal classes logic.
Here is the XML:
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="#+id/container"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="#+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.Toolbar
android:id="#+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:contentInsetStart="0dp"
app:layout_scrollFlags="scroll|snap"
app:titleTextColor="#android:color/white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="#+id/toolbarBackButton"
android:layout_width="?attr/actionBarSize"
android:layout_height="?attr/actionBarSize"
android:visibility="invisible"/>
<TextView
android:id="#+id/toolbarText"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#color/colorPrimary"
android:fontFamily="sans-serif-medium"
android:gravity="center_vertical"
android:text="#string/activity_main_toolbar_title"
android:textColor="#android:color/white"
android:textSize="20sp" />
<ImageView
android:id="#+id/toolbarBucket"
android:layout_width="?attr/actionBarSize"
android:layout_height="?attr/actionBarSize" />
</LinearLayout>
</androidx.appcompat.widget.Toolbar>
<com.google.android.material.tabs.TabLayout
android:id="#+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabBackground="#color/colorPrimary"
app:tabIndicatorColor="#color/colorIndicator"
app:tabSelectedTextColor="#color/colorActive"
app:tabTextColor="#color/colorInactive" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager2.widget.ViewPager2
android:id="#+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_anchor="#id/tabs"
app:layout_anchorGravity="bottom"
app:layout_behavior="#string/appbar_scrolling_view_behavior" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="#+id/add_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:layout_margin="#dimen/regularMargin"
android:src="#drawable/ic_baseline_add_24"
app:tint="#android:color/white"/></androidx.coordinatorlayout.widget.CoordinatorLayout>
Any clues will be much appreciated!
My main activity code
package com.example.loftmoney.screens.main;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.widget.ViewPager2;
import android.content.Intent;
import android.os.Bundle;
import com.example.loftmoney.R;
import com.example.loftmoney.model.Item;
import com.example.loftmoney.screens.additem.AddItemActivity;
import com.example.loftmoney.screens.balance.BalanceFragment;
import com.example.loftmoney.screens.budget.BudgetFragment;
import com.example.loftmoney.screens.main.adapter.FragmentItem;
import com.example.loftmoney.screens.main.adapter.MainPagerAdapter;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements MainClickAdapter, EditModeListener {
private ViewPager2 viewPager;
private Toolbar toolbar;
TabLayout tabs;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupFab();
setupTabs();
setupToolbar();
}
private void setupToolbar() {
toolbar = findViewById(R.id.toolbar);
}
private void setupTabs() {
List<FragmentItem> fragments = setupFragments();
tabs = findViewById(R.id.tabs);
viewPager = findViewById(R.id.viewPager);
MainPagerAdapter adapter = new MainPagerAdapter(fragments, this, 0);//behavior?
viewPager.setOffscreenPageLimit(fragments.size());
viewPager.setAdapter(adapter);
new TabLayoutMediator(tabs, viewPager,
(tab, position) -> tab.setText(
fragments.get(position).getTitle()
)
).attach();
}
private List<FragmentItem> setupFragments() {
List<FragmentItem> fragments = new ArrayList();
fragments.add(new FragmentItem(new BudgetFragment(), getString(R.string.expenses), Item.ItemType.EXPENSE));
fragments.add(new FragmentItem(new BudgetFragment(), getString(R.string.incomes), Item.ItemType.INCOME));
fragments.add(new FragmentItem(new BalanceFragment(), getString(R.string.balance)));
return fragments;
}
private Fragment getActiveFragment() {
final int activeFragmentIndex = viewPager.getCurrentItem();
Fragment activeFragment = (BudgetFragment) getSupportFragmentManager().getFragments().get(activeFragmentIndex);
return activeFragment;
}
private void setupFab() {
FloatingActionButton addFab = findViewById(R.id.add_fab);
addFab.setOnClickListener(v -> onFabClick());
}
#Override
public void onFabClick() {
BudgetFragment activeFragment = (BudgetFragment) getActiveFragment();
Intent intent = new Intent(MainActivity.this, AddItemActivity.class).putExtra("type", activeFragment.type);
activeFragment.startActivityForResult(intent, BudgetFragment.LAUNCH_ADD_ITEM);
}
#Override
public void onEditModeChangeListener(boolean status) {
toolbar.setBackgroundColor(getApplicationContext().getColor(
status ? R.color.editModeColor : R.color.colorPrimary));
}
}
This was because I've set up an anchor.
I've deleted these 2 lines and all works fine
app:layout_anchor="#id/tabs"
app:layout_anchorGravity="bottom"
In my project i have a ViewPager that display some image horizontally. I want to put it in a ScrollView but when I do this it dose not work.
here is my XML :
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true">
<LinearLayout 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:orientation="vertical"
tools:context=".MainActivity">
<com.pixelcan.inkpageindicator.InkPageIndicator
android:id="#+id/indicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
app:ipi_animationDuration="320"
app:ipi_currentPageIndicatorColor="#android:color/black"
app:ipi_dotDiameter="8dp"
app:ipi_dotGap="8dp"
app:ipi_pageIndicatorColor="#android:color/darker_gray" />
<android.support.v4.view.ViewPager
android:id="#+id/viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>
and this is my main :`
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import com.pixelcan.inkpageindicator.InkPageIndicator;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
ViewPager viewPager;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.viewpager);
InkPageIndicator inkPageIndicator = (InkPageIndicator) findViewById(R.id.indicator);
ArrayList<Model> values = new ArrayList<>();
values.add(new Model("image 1", R.drawable.baby1));
values.add(new Model("image 2", R.drawable.baby2));
values.add(new Model("image 3", R.drawable.baby3));
values.add(new Model("image 4", R.drawable.baby4));
View_Pager_Adapter adapter = new View_Pager_Adapter(values);
viewPager.setAdapter(adapter);
inkPageIndicator.setViewPager(viewPager);
}
}
I search a lot about this but non of them was useful for me.
please help me
Thanks
My problem with ListView
ListView Interference with AppBarLayout
I want to be under the AppBarLayout
progressbar in center page
problem screenshot
How to App bar Title and back button to Right?
activity_category.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:id="#+id/activity_category"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.sokhanak.CategoryActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="#style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="#+id/toolbar"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="?attr/colorPrimary" />
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v4.widget.ContentLoadingProgressBar
android:id="#+id/progress"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:visibility="visible" />
<ListView
android:id="#+id/listView"
android:layout_width="fill_parent"
android:layout_height="match_parent"
app:layout_behavior="#string/appbar_scrolling_view_behavior" />
</FrameLayout>
</LinearLayout>
CategoryActivity.java
package com.example;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.ContentLoadingProgressBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import com.example.adapter.QuoteArrayAdapter;
import com.example.model.QuoteDataModel;
import com.example.parser.JSONParser;
import com.example.utils.Keys;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
public class CategoryActivity extends AppCompatActivity {
private Toolbar toolbar;
private ListView listView;
private ArrayList<QuoteDataModel> list;
private QuoteArrayAdapter adapter;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_category);
Intent i = getIntent();
final String categoryId = i.getStringExtra("categoryId");
String categoryName = i.getStringExtra("categoryName");
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setTitle(categoryName);
/**
* Array List for Binding Data from JSON to this List
*/
list = new ArrayList<>();
adapter = new QuoteArrayAdapter(this, list);
/**
* Getting List and Setting List Adapter
*/
listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Snackbar.make(findViewById(R.id.parentLayout), list.get(position).getProfileName() + " => " + list.get(position).getQuoteLike(), Snackbar.LENGTH_LONG).show();
}
});
/**
* Check internet connection
*/
if (!MainActivity.NetworkUtil.isOnline(getApplicationContext())) {
Toast.makeText(CategoryActivity.this, "اتصال به اینترنت برقرار نیست",
Toast.LENGTH_LONG).show();
}
new GetDataCategory().execute(categoryId);
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if(firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0)
{
new GetDataCategory().execute(categoryId);
}
}
});
// screen turn on ever
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
/* */
}
Change Your Relative Layout to Linear Layout with Vertical Orientation
/**Make a change in your listview**/
ListView Interference with AppBarLayout:
<ListView
app:layout_behavior="#string/appbar_scrolling_view_behavior"
android:id="#+id/listView"
android:layout_below="#+id/toolbar"
android:layout_width="fill_parent"
android:layout_height="match_parent" />
App bar Title and back button to Right:
Just add below line inside application tag in AndroidManifestFile
android:supportsRtl="true"
For putting list below app bar you need to update listview layout with below app bar.
Here is the updated code.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="#+id/activity_category"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.sokhanak.CategoryActivity"
>
<android.support.design.widget.AppBarLayout
android:id="#+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="#style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="#+id/toolbar"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="?attr/colorPrimary"
/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.ContentLoadingProgressBar
android:id="#+id/progress"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="visible" />
<ListView app:layout_behavior="#string/appbar_scrolling_view_behavior"
android:id="#+id/listView"
android:layout_below="#+id/appBarLayout"
android:layout_width="fill_parent"
android:layout_height="match_parent" />
</RelativeLayout>
So in my Android app I have where the main activity has tabs and in each tab there is a fragment containing a listview. But for some reason the last item in the listview always gets cut off. I have looked around for solutions but I havent found any yet. Any suggestions?
Main Activity layout
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="#+id/rl"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="#style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="#+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="#style/ThemeOverlay.AppCompat.Light" />
<android.support.design.widget.TabLayout
android:id="#+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="#+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="#string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
Fragment with ListView
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ProgressBar
android:id="#+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
style="#style/Widget.AppCompat.ProgressBar" />
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<ListView
android:id="#+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
style="#style/Widget.AppCompat.ProgressBar"></ListView>
</LinearLayout>
</RelativeLayout>
List Item Layout
<?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="wrap_content"
android:padding="2dp"
android:layout_margin="5dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="New Text"
android:id="#+id/title"
android:textSize="20sp"
android:textStyle="bold"
android:typeface="normal"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="New Text"
android:id="#+id/author"
android:textSize="15sp"
android:typeface="normal"
android:layout_below="#+id/publishdate"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="New Text"
android:id="#+id/publishdate"
android:textSize="15sp"
android:typeface="normal"
android:layout_below="#+id/title"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</LinearLayout>
List Adapter Class
package com.czhou.dailyprincetoniannewspaper.adapters;
import android.content.ClipData;
import android.content.Context;
import android.graphics.Paint;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.czhou.dailyprincetoniannewspaper.NewspaperMetaObject;
import com.czhou.dailyprincetoniannewspaper.R;
import java.util.List;
public class NewsListAdapter extends ArrayAdapter<NewspaperMetaObject> {
static class ViewHolder {
TextView author;
TextView publishdate;
TextView title;
}
private LayoutInflater inflater;
List<NewspaperMetaObject> newsitems;
public NewsListAdapter(Context context, List<NewspaperMetaObject> items) {
super(context, R.layout.newslistitem, items);
this.newsitems = items;
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
#Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.newslistitem, parent, false);
viewHolder = new ViewHolder();
viewHolder.title = (TextView) convertView.findViewById(R.id.title);
viewHolder.author = (TextView) convertView.findViewById(R.id.author);
viewHolder.publishdate = (TextView) convertView.findViewById(R.id.publishdate);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.title.setText(newsitems.get(position).getArticleTitle());
viewHolder.title.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
viewHolder.publishdate.setText(newsitems.get(position).getArticlePublishDate());
viewHolder.author.setText(newsitems.get(position).getArticleAuthor());
System.out.println(viewHolder.publishdate.getText());
return convertView;
}
}
Main Activity Class
package com.czhou.dailyprincetoniannewspaper;
import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import java.util.ArrayList;
import java.util.List;
/**
* Created by czhou on 11/21/2015.
*/
public class MainActivity extends AppCompatActivity {
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
private ProgressBar mProgressBar;
private CoordinatorLayout coordinatorLayout;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager){
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new PUNewsFragment(), "News");
adapter.addFragment(new PUSportsFragment(), "Sports");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
#Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
#Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
#Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
}
Put in a line like android:paddingBottom="20dp" into your ListView item in your Fragment XML file. Adjust the 20dp value until it looks the way you want it to.
For some strange reason it just fixes the problem, and it doesn't have to do with the size of the ListView being changed. Somehow the small padding forces the ListView to layout in a different way.
Adding below line in your RecyclerView should solve the issue.
android:layout_marginBottom="?attr/actionBarSize"
Use RecyclerView instead of ListView. It will work for sure. Scrolling of the toolbar strips the bottom space of your layout. ListView won't work perfectly with app:layout_behavior="#string/appbar_scrolling_view_behavior". If you want scrolling and view full items ,use RecyclerView or NestedScrollView instead of ListView.
If you remove app:layout_behavior="#string/appbar_scrolling_view_behavior" and
app:layout_scrollFlags="scroll|enterAlways"
of toolbar you can see ListView with full items.
So, use RecyclerView instead of ListView with app:layout_behavior="#string/appbar_scrolling_view_behavior" and app:layout_scrollFlags="scroll|enterAlways". It will works with scrolling and layout behavior.
For anyone still having this issue, removing the action bar worked for me.
Inside your AndroidManifest:
android:theme="#style/AppTheme.NoActionBar">
Also delete the Action Bar from the layout XML for the Activity.
And remove this from your Activity class:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
I use fragment and i want to retieve datas into database and show theses datas into layout created in the code.
there's the code:
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
public class DetailFragment extends Fragment {
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_rssitem_detail, container, false);
return view;
}
there's the actual layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/layout_all"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="#+id/layout_fiche"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#drawable/single_border">
<TextView
android:id="#+id/detailsText_fiche"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_marginTop="1dip"
android:text="Zone de Fiche"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="20dip" />
</LinearLayout>
</LinearLayout>
I want add many layaout below the TextView id:detailsText_fiche. How can i do?
thanx in advance,
You need to implement it programmatically, take a look at this question, to see how to do it.