[英]Issue to pass JSON string from fragment to adapter
我是android開發的新手,我試圖用項目實現一個列表視圖,當單擊一個項目時,它應顯示另一個包含特定項目列表的列表視圖,我使用JSON字符串值填充了第一個列表視圖, item click我想傳遞一個特定的JSON字符串,其中包含單擊項目的特定值以列出適配器,這里可能是代碼:
public class MainFragment extends Fragment{
ListView raw_List;
FragmentActivity activity;
Data.Raw[] messages;
Functions f;
TextView fname;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.singersfragment, container, false);
raw_List = (ListView) v.findViewById(R.id.raw_list);
fname = (TextView) v.findViewById(R.id.title);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
activity = this.getActivity();
f = new Functions(activity);
Boolean unique = true;
//set fonts
fname.setTextSize(f.w(6));
//get data
final String json_data_string = getArguments().getString("json_data_string");
messages = f.getMessages(json_data_string);
//fill data
Data.Raw[] messages = this.messages;
Raw_List_Adapter adapter = new Raw_List_Adapter(activity, GetUniqueLastNames(messages));
raw_List.setAdapter(adapter);
raw_List.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
//add code here
Bundle b = new Bundle();;
b.putString("json_data_string",json_data_string);
Fragment playpage = Fragment.instantiate(activity, Data_list_Fragment.class.getName(),b);
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
ft.add(R.id.realtabcontent, playpage);
ft.commit();
}
});
}
public static Data.Song[] GetUniqueLastNames(Data.Raw[] messages) {
Set<Data.Raw> set = new HashSet<Data.Raw>();
for (int i = 0; i < messages.length; i++) {
set.add(messages[i]);
}
return set.toArray(new Data.Raw[]{});
}}
public class Singers_List_Adapter extends ArrayAdapter<Object> {
FragmentActivity activity;
String json_categories_string;
Data.Raw[] messages;
public Singers_List_Adapter(FragmentActivity activity, Data.Raw[] messages) {
super(activity, 0);
this.activity = activity;
this.messages = messages;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflator = activity.getLayoutInflater();
convertView = inflator.inflate(R.layout.raw_item, null);
TextView raw_title = (TextView) convertView.findViewById(R.id.raw_title);
SmartImageView raw_image = (SmartImageView) convertView.findViewById(R.id.raw_image);
raw_title.setText(Html.fromHtml(messages[position].amname));
raw_image.setImageUrl(messages[position].imageurl, activity.getResources().getIdentifier(activity.getResources().getString(R.string.default_image), "drawable", activity.getPackageName()));
Functions f = new Functions(activity);
raw_title.setTextSize(f.w(6));
return convertView;
}
@Override
public int getCount() {
return messages.length;
}
@Override
public Data.Raw getItem(int position) {
return messages[position];
}
@Override
public long getItemId(int position) {
return 0;
}}
使用此代碼,單擊“項目”后,我將獲得所有數據列表,而不是單擊的項目的特定數據。
您在onActivityCreated方法中誤認為了項目單擊偵聽器:
raw_List.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
//add code here
Bundle b = new Bundle();;
b.putString("json_data_string",json_data_string); // <--- this is the issue
Fragment playpage = Fragment.instantiate(activity, Data_list_Fragment.class.getName(),b);
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
ft.add(R.id.realtabcontent, playpage);
ft.commit();
}
});
每當您要從任何適配器獲取itemClickListener時,都可以使用它的監聽器參數進行數據提取,例如:
parent.getItemAtPosition(position)
代替
json_data_string
您需要將其強制轉換為所需的輸出,因為它將返回Object類型。
所以你的改變是
raw_List.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
//add code here
Bundle b = new Bundle();;
b.putString("json_data_string",parent.getItemAtPosition(position)); // <--- updated line (Casting needed)
Fragment playpage = Fragment.instantiate(activity, Data_list_Fragment.class.getName(),b);
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
ft.add(R.id.realtabcontent, playpage);
ft.commit();
}});
檢查出更多信息: AdapterView.OnItemClickListener
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.