我對android非常陌生,我試圖動態創建滑動選項卡並添加可視化頁面,即片段到視圖尋呼機。 我看到了一些教程,並嘗試了一些東西。 我粘貼下面的代碼相同。Android:動態視圖尋呼機只顯示第一個片段的變化
這是我米添加到viewpager
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import technovators.mahendraprophecy.R;
/**
* A simple {@link android.app.Fragment} subclass.
*/
public class SUB_LIST_FRAGMENT extends android.support.v4.app.Fragment {
static String category;
public SUB_LIST_FRAGMENT() {
// Required empty public constructor
}
public static final SUB_LIST_FRAGMENT newInstance(String message)
{
category=message;
SUB_LIST_FRAGMENT f = new SUB_LIST_FRAGMENT();
Bundle bdl = new Bundle(1);
return f;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
Toast.makeText(getActivity(),category,Toast.LENGTH_LONG).show();
((TextView) getActivity().findViewById(R.id.cat)).setText(category);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.sub_list_fragment, container, false);
}
}
這是具有連接到它
public class LATEST_NEWSLETTERS extends android.support.v4.app.Fragment {
MaterialTabs subTabs;
ViewPager subPager;
private String[] titles = new String[]{"Weekly Newsletter", "Market News & Updates", "Day Trade Flash News"};
ArrayList<String> headers,header_colors,category_ids;
List<Fragment> fList;
public LATEST_NEWSLETTERS()
{
}
public LATEST_NEWSLETTERS(String categoryData)
{
try
{
JSONObject object=new JSONObject(categoryData);
JSONArray array=object.getJSONArray("categories");
headers=new ArrayList<>();
header_colors=new ArrayList<>();
category_ids=new ArrayList<>();
fList = new ArrayList<Fragment>();
for(int i=0;i<array.length();i++)
{
object=array.getJSONObject(i);
headers.add(object.getString("name"));
header_colors.add(object.getString("bgcolor"));
category_ids.add(object.getString("cat_id"));
fList.add(SUB_LIST_FRAGMENT.newInstance(object.getString("cat_id")));
}
}
catch (JSONException e)
{
e.printStackTrace();
}
}
void setupTabs()
{
subTabs= (MaterialTabs) getActivity().findViewById(R.id.subTabs);
subPager= (ViewPager) getActivity().findViewById(R.id.subPager);
latestNewLetterAdapter adapter=new latestNewLetterAdapter(getFragmentManager());
subPager.setAdapter(adapter);
subTabs.setViewPager(subPager);
subTabs.setIndicatorColor(Color.parseColor(header_colors.get(0)));
subTabs.setTextColorSelected(Color.parseColor(header_colors.get(0)));
subPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener()
{
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position)
{
subTabs.setIndicatorColor(Color.parseColor(header_colors.get(position)));
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.mainfragment_latest_newsletters, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setupTabs();
}
class latestNewLetterAdapter extends FragmentStatePagerAdapter implements MaterialTabs.CustomTabProvider
{
public latestNewLetterAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public Fragment getItem(int position)
{
return fList.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
}
/*
@Override
public CharSequence getPageTitle(int position)
{
String x=headers.get(position);
if(x.contains("&"))
{
x=x.replaceAll("&"," & ");
}
return x;
}
*/
@Override
public int getCount()
{
return headers.size();
}
@Override
public View getCustomTabView(ViewGroup viewGroup, int i) {
TextView header=new TextView(getActivity());
String x=headers.get(i);
if(x.contains("&"))
{
x=x.replaceAll("&"," & ");
}
header.setTextColor(Color.parseColor(header_colors.get(i)));
header.setText(x);
header.setGravity(Gravity.CENTER);
return header;
}
}
}
我的標籤和一個viewpager主片段的片段類m在前一個活動中使用Async Task從服務器中檢索json(json-array)數據,並以構造函數中的字符串形式將它傳遞給這個分支。
適配器使用標題填充標籤,並從片段類的自定義構造函數中創建的片段列表中獲取項目,我也讀過使用自定義構造函數不是一個好習慣,我將實現接口同樣的目的,但這不是這裏的主要問題。
問題
如果你看到,我爲傳遞類ID到viewpager的每個片段,並應設置相應類別中的每個片段,但這裏所發生的只是設置中的id第一個片段或稱它爲第一個標籤休息所有片段只顯示文本「類別ID」,而不是要設置的類別,而不是當我滑動到第二個片段時,第二個片段的代碼ID在第一個片段中設置,當我滑動到第三個片段第三個的類別ID設置爲第一個
所以基本上所有的動作都發生在fi只有第一個片段而不是全部。
請幫我在哪裏我錯了嗎? 我需要添加動態頁面,因爲每次類別的數量都不一樣,因此應該將頁面數添加到視圖尋呼機,並且每個頁面中都會加載一個對應於該頁面的類別ID的列表。
@哈斯姆讓我試試 –
@哈斯拉姆它做的工作謝謝你。 –
不錯,歡迎來到:) –