Hallo Freunde bitte hilf mir. Ich stecke hier für mehr als 2 Tage und ich verstehe nicht, was der Fehler hier ist. Mein Problem ist, dass ich die Tabs mit Icon basierend auf den JSON-Daten erstelle. Das Problem ist, dass Icons kommen, aber sie sind weg, wenn die restlichen Daten in den Fragmenten geladen werden. Aber wenn ich den Adapter entferne, kommen Icons und sie sind hier sichtbar Ich hatte einen Fehler gefunden, als ich diese Zeile sticker_tab.setupWithViewPager (sticker_pager) kommentieren; dann ist alles in Ordnung arbeiten, kann aber nicht auf die Registerkarte auf der Grundlage der viewpager Wechsel oder umgekehrt Hier ist mein Code bewegen:Erstellen von Registerkarten dynamisch in Android
ChatHistory.java
public class ChatHistory extends AppCompatActivity {
@BindView(R.id.chat_his_list)
ListView chat_his_list;
@BindView(R.id.chat_his_toolbar)
Toolbar chat_his_toolbar;
@BindView(R.id.sendmsg)
EmojiconEditText sendmsg;
OkHttpClient chatclient = new OkHttpClient();
public static final String BroadCastAction = "chat";
BroadcastReceiver chatreceiver;
ArrayList<Chat_Pojo> chatlist = new ArrayList<>();
Chat_History_Adapter chat_history_adapter;
@BindView(R.id.smiley)
ImageView smiley;
EmojIconActions emojIcon;
@BindView(R.id.mainviewgroup)
RelativeLayout mainviewgroup;
@BindView(R.id.goondate)
Button goondate;
@BindView(R.id.buyagift_layout)
LinearLayout buyagift_layout;
boolean buyagiftclicked = false;
@BindView(R.id.sticker_tab)
TabLayout sticker_tab;
@BindView(R.id.sticker_pager)
ViewPager sticker_pager;
Chat_Sticker_Adapter chat_sticker_adapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chat_history);
ButterKnife.bind(this);
setSupportActionBar(chat_his_toolbar);
assert getSupportActionBar() != null;
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);
chat_history_adapter = new Chat_History_Adapter(ChatHistory.this, chatlist);
chat_his_list.setStackFromBottom(true);
chat_his_list.setTranscriptMode(chat_his_list.TRANSCRIPT_MODE_NORMAL);
chat_his_list.setAdapter(chat_history_adapter);
emojIcon = new EmojIconActions(this, mainviewgroup, sendmsg, smiley);
emojIcon.setIconsIds(R.mipmap.keyboard_chat, R.mipmap.smiley_chat);
Session.pushnotification(getApplicationContext());
stickermethd();
emojIcon.setKeyboardListener(new EmojIconActions.KeyboardListener() {
@Override
public void onKeyboardOpen() {
Constant.l("Open");
}
@Override
public void onKeyboardClose() {
emojIcon.closeEmojIcon();
Constant.l("Close");
}
});
emojIcon.ShowEmojIcon();
if (getIntent().hasExtra("mtype")) {
if (getIntent().hasExtra("popup")) {
gondatepopup(getIntent().getStringExtra("oppusername").replace("$", " "), getIntent().getStringExtra("profileimg"));
}
chathistory(Session.getUserID(getApplicationContext()), getIntent().getStringExtra("oid"));
getSupportActionBar().setTitle(getIntent().getStringExtra("oppusername").replace("$", " "));
Session.oppuserimg(getApplicationContext(), getIntent().getStringExtra("profileimg"));
} else {
chathistory(Session.getUserID(getApplicationContext()), getIntent().getStringExtra("oid"));
getSupportActionBar().setTitle(getIntent().getStringExtra("oppusername").replace("$", " "));
}
chat_his_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (chatlist.get(position).getType().equals("image")) {
Intent chatimageintent = new Intent(getApplicationContext(), Chat_Image.class);
chatimageintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
chatimageintent.putExtra("chatimage", chatlist.get(position).getMessage());
startActivity(chatimageintent);
}
}
});
chatreceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, final Intent intent) {
if (intent.getStringExtra("msg").equals("gondate")) {
gondatepopup(getIntent().getStringExtra("oppusername").replace("$", " "), Session.getoppuserimg(getApplicationContext()).replace(",", ""));
} else if (intent.getStringExtra("msg").equals("Your Go on date Rejected")) {
goondate.setVisibility(View.VISIBLE);
} else {
chat_history_adapter.addmsg(intent.getStringExtra("sid"), intent.getStringExtra("msg"), intent.getStringExtra("type"));
}
}
};
IntentFilter intfil = new IntentFilter(BroadCastAction);
registerReceiver(chatreceiver, intfil);
/*buyagift_layout.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, Constant.getScreenWidth(getApplicationContext())/4));*/
}
private void gondatepopup(String username, String userimage) {
goondate.setVisibility(View.GONE);
final Dialog gondatadialog = new Dialog(ChatHistory.this);
gondatadialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
gondatadialog.setContentView(R.layout.gondate_dialog);
gondatadialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
gondatadialog.setCancelable(false);
TextView name = (TextView) gondatadialog.findViewById(R.id.name);
name.setText(username);
CircleImageView profile_image = (CircleImageView) gondatadialog.findViewById(R.id.profile_image);
Glide.with(getApplicationContext()).load(userimage).into(profile_image);
FancyButton accept = (FancyButton) gondatadialog.findViewById(R.id.accept);
accept.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
gondatadialog.dismiss();
acceptdialog();
gondatedisplay();
}
});
FancyButton decline = (FancyButton) gondatadialog.findViewById(R.id.decline);
decline.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
goondate.setVisibility(View.VISIBLE);
sendmsgmethod("Your Go on date Rejected");
gondatadialog.dismiss();
}
});
gondatadialog.show();
}
@OnClick(R.id.gift)
public void gift() {
if (!buyagiftclicked) {
buyagiftclicked = true;
buyagift_layout.setVisibility(View.VISIBLE);
} else {
buyagiftclicked = false;
buyagift_layout.setVisibility(View.GONE);
}
}
private void chathistory(String senderid, String receiverid) {
Constant.showloader(ChatHistory.this);
HttpUrl.Builder chthisurl = HttpUrl.parse(url + "chat&task=getchat").newBuilder();
chthisurl.addQueryParameter("sender_id", senderid);
chthisurl.addQueryParameter("reciever_id", receiverid);
Request chathistoryreq = new Request.Builder().url(chthisurl.build().toString()).build();
Constant.l(chthisurl.build().toString());
chatclient.newCall(chathistoryreq).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Constant.l(e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
try {
final JSONObject chathisobj = new JSONObject(response.body().string());
JSONArray chathisarray = chathisobj.getJSONArray("text");
for (int i = 0; i < chathisarray.length(); i++) {
JSONObject chathisarrayobj = chathisarray.getJSONObject(i);
final Chat_Pojo chat_pojo = new Chat_Pojo();
chat_pojo.setMessage(chathisarrayobj.getString("message"));
chat_pojo.setRid(chathisarrayobj.getString("rid"));
chat_pojo.setSid(chathisarrayobj.getString("sid"));
chat_pojo.setType(chathisarrayobj.getString("type"));
runOnUiThread(new Runnable() {
@Override
public void run() {
if (chathisobj.has("godate")) {
goondate.setVisibility(View.GONE);
}
chatlist.add(chat_pojo);
chat_history_adapter.notifyDataSetChanged();
}
});
}
} catch (JSONException e) {
Constant.l(e.toString());
}
Constant.dismissloader();
}
}
});
}
@Override
public void onBackPressed() {
Session.removepushnotification(getApplicationContext());
Intent chathistoryintent = new Intent(getApplicationContext(), Main_Screen.class);
chathistoryintent.putExtra("chathis", "chathis");
startActivity(chathistoryintent);
}
@Override
protected void onPause() {
super.onPause();
Session.removepushnotification(getApplicationContext());
}
@Override
protected void onStop() {
super.onStop();
Session.removepushnotification(getApplicationContext());
}
@Override
protected void onResume() {
super.onResume();
Session.pushnotification(getApplicationContext());
}
@OnClick(R.id.goondate)
public void goondate() {
Request sendmsgreq = new Request.Builder().url(url + "godate&task=send&sender_id=" + Session.getUserID(getApplicationContext()) + "&reciever_id=" + getIntent().getStringExtra("oid")).build();
chatclient.newCall(sendmsgreq).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Constant.l(e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Constant.l(response.toString());
try {
JSONObject sendobj = new JSONObject(response.body().string());
if (sendobj.getString("status").equals("Success")) {
runOnUiThread(new Runnable() {
@Override
public void run() {
goondate.setVisibility(View.GONE);
}
});
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
@Override
protected void onDestroy() {
unregisterReceiver(chatreceiver);
super.onDestroy();
}
private void acceptdialog() {
final Dialog gondateacceptdialog = new Dialog(ChatHistory.this);
gondateacceptdialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
gondateacceptdialog.setContentView(R.layout.gondate_accept);
gondateacceptdialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
gondateacceptdialog.setCancelable(false);
RecyclerView accept_list = (RecyclerView) gondateacceptdialog.findViewById(R.id.accept_list);
accept_list.setLayoutManager(new LinearLayoutManager(ChatHistory.this, LinearLayoutManager.VERTICAL, false));
final FastItemAdapter<GonDate_Accept_Adapter> gonacceptadapter = new FastItemAdapter<>();
accept_list.setAdapter(gonacceptadapter);
Request acceptrequest = new Request.Builder().url(url + "godatelist").build();
chatclient.newCall(acceptrequest).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Constant.l(e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
JSONObject acceptjsonobj = new JSONObject(response.body().string());
JSONArray acceptarray = acceptjsonobj.getJSONArray("list");
for (int i = 0; i < acceptarray.length(); i++) {
JSONObject acceptobjarray = acceptarray.getJSONObject(i);
Gson acceptgson = new Gson();
final GonDate_Accept_Adapter goacceptadapter = acceptgson.fromJson(String.valueOf(acceptobjarray), GonDate_Accept_Adapter.class);
runOnUiThread(new Runnable() {
@Override
public void run() {
gonacceptadapter.add(goacceptadapter);
}
});
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
gonacceptadapter.withOnClickListener(new FastAdapter.OnClickListener<GonDate_Accept_Adapter>() {
@Override
public boolean onClick(View v, IAdapter<GonDate_Accept_Adapter> adapter, GonDate_Accept_Adapter item, int position) {
sendmsgmethod(item.getAceepttype());
gondateacceptdialog.dismiss();
return true;
}
});
gondateacceptdialog.show();
}
@OnClick(R.id.attachment)
public void attachment() {
TedBottomPicker bottomSheetDialogFragment = new TedBottomPicker.Builder(ChatHistory.this)
.setOnImageSelectedListener(new TedBottomPicker.OnImageSelectedListener() {
@Override
public void onImageSelected(Uri uri) {
try {
Bitmap attachbitmap = MediaStore.Images.Media.getBitmap(ChatHistory.this.getContentResolver(), uri);
attach(attachbitmap);
} catch (IOException e) {
Constant.l(e.toString());
}
}
})
.setPeekHeight(getResources().getDisplayMetrics().heightPixels/2)
.create();
bottomSheetDialogFragment.show(getSupportFragmentManager());
}
@OnClick(R.id.smiley)
public void smiley() {
emojIcon.ShowEmojIcon();
}
public String getStringImage(Bitmap bitmap) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] imagebytes = baos.toByteArray();
String uploadencodedImage = Base64.encodeToString(imagebytes, Base64.DEFAULT);
return uploadencodedImage;
}
private void attach(Bitmap bitmapimage) {
Constant.showloader(ChatHistory.this);
RequestBody formbody = new FormBody.Builder().add("document1", getStringImage(bitmapimage)).build();
Request attachrequest = new Request.Builder().url(url + "chatdocument&task=send&sender_id=" + Session.getUserID(getApplicationContext()) + "&reciever_id=" + getIntent().getStringExtra("oid")).post(formbody).build();
chatclient.newCall(attachrequest).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Constant.l(e.toString());
Constant.dismissloader();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
final JSONObject attachobj = new JSONObject(response.body().string());
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
chat_history_adapter.addmsg(Session.getUserID(getApplicationContext()), attachobj.getString("url"), "image");
} catch (JSONException e) {
e.printStackTrace();
}
}
});
} catch (JSONException e) {
e.printStackTrace();
}
Constant.dismissloader();
}
});
}
@OnClick(R.id.send)
public void send() {
if (sendmsg.getText().toString().isEmpty()) {
Constant.t(getApplicationContext(), "Please type message");
} else {
String msg = sendmsg.getText().toString();
sendmsgmethod(msg);
}
}
private void gondatedisplay() {
Constant.showloader(ChatHistory.this);
Request gonreqstatus = new Request.Builder().url(url + "changestatus&sender_id=" + Session.getUserID(getApplicationContext()) + "&reciever_id=" + getIntent().getStringExtra("oid") + "&status=0").build();
chatclient.newCall(gonreqstatus).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Constant.l(e.toString());
Constant.dismissloader();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Constant.l(response.body().string());
Constant.dismissloader();
}
});
}
private void sendmsgmethod(final String sendsmsg) {
chat_his_list.setSelection(chat_history_adapter.getCount() - 1);
String message = StringEscapeUtils.escapeJava(sendsmsg);
message = message.replace("\\", "$");
Request sendmsgreq = new Request.Builder().url(url + "chat&task=send&sender_id=" + Session.getUserID(getApplicationContext()) + "&reciever_id=" + getIntent().getStringExtra("oid") + "&message=" + message).build();
chatclient.newCall(sendmsgreq).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Constant.l(e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Constant.l(response.toString());
try {
JSONObject sendobj = new JSONObject(response.body().string());
if (sendobj.getString("status").equals("Success")) {
runOnUiThread(new Runnable() {
@Override
public void run() {
chat_history_adapter.addmsg(Session.getUserID(getApplicationContext()), sendsmsg, "text");
sendmsg.setText("");
}
});
}
} catch (JSONException e) {
Constant.l(e.toString());
}
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Session.removepushnotification(getApplicationContext());
Intent chathistoryintent = new Intent(getApplicationContext(), Main_Screen.class);
chathistoryintent.putExtra("chathis", "chathis");
startActivity(chathistoryintent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void stickermethd() {
Request stickerrequest = new Request.Builder().url(url + "gifts&facebook_id=" + Session.getUserID(getApplicationContext())).build();
Constant.l(url + "gifts&facebook_id=" + Session.getUserID(getApplicationContext()));
chatclient.newCall(stickerrequest).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Constant.l(e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
JSONObject startobj = new JSONObject(response.body().string());
JSONObject giftobj = startobj.getJSONObject("giftcategories");
final JSONArray giftarray = giftobj.getJSONArray("giftmenu");
for (int i = 0; i < giftarray.length(); i++) {
JSONObject gigtarrayboj=giftarray.getJSONObject(i);
InputStream is = (InputStream) new URL(gigtarrayboj.getString("giftcatimage")).getContent();
Constant.l(giftarray.getJSONObject(i).getString("giftcatimage"));
final Drawable d = Drawable.createFromStream(is, "caticon");
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
sticker_tab.addTab(sticker_tab.newTab().setIcon(d));
Constant.l("Tab Count===>" + String.valueOf(sticker_tab.getTabCount()));
} catch (Exception e) {
Constant.l(e.toString());
}
}
});
}
runOnUiThread(new Runnable() {
@Override
public void run() {
chat_sticker_adapter = new Chat_Sticker_Adapter(getSupportFragmentManager(), giftarray);
sticker_pager.setAdapter(chat_sticker_adapter);
sticker_tab.setupWithViewPager(sticker_pager);
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
} Chat_Sticker_Adapter.java
public class Chat_Sticker_Adapter extends FragmentPagerAdapter {
JSONArray jsonArray;
public Chat_Sticker_Adapter(FragmentManager fm,JSONArray jsonArray) {
super(fm);
this.jsonArray = jsonArray;
}
@Override
public Fragment getItem(int position) {
return Buy_A_Gift_Fragment.getInstance(position);
}
@Override
public int getCount() {
return jsonArray.length();
}
/*public View getTabView(int position) {
View v = LayoutInflater.from(context).inflate(R.layout.single_tab, null);
CircleImageView img = (CircleImageView) v.findViewById(R.id.tab_icon);
try {
Glide.with(context).load(jsonArray.getJSONObject(position).getString("giftcatimage")).into(img);
Constant.l(jsonArray.getJSONObject(position).getString("giftcatimage"));
} catch (JSONException e) {
e.printStackTrace();
}
return v;
}*/
}
Fragment der Registerkarte
public class Buy_A_Gift_Fragment extends Fragment {
@BindView(R.id.buyagift_recyclerview)
RecyclerView buyagift_recyclerview;
Buy_a_gift_adapter buyAGiftAdapterFastItemAdapter;
ArrayList<StickerImage_Icon> stickerarray = new ArrayList<>();
public Buy_A_Gift_Fragment() {
}
public static Fragment getInstance(int position) {
Buy_A_Gift_Fragment otcFragment = new Buy_A_Gift_Fragment();
Bundle bundle = new Bundle();
bundle.putInt("position", position);
otcFragment.setArguments(bundle);
return otcFragment;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.buyagift_frag, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ButterKnife.bind(this, view);
buyAGiftAdapterFastItemAdapter = new Buy_a_gift_adapter(getActivity(), stickerarray);
LinearLayoutManager buygridlayoutmanager = new LinearLayoutManager(getActivity(),LinearLayoutManager.HORIZONTAL,false);
buyagift_recyclerview.setLayoutManager(buygridlayoutmanager);
buyagift_recyclerview.setAdapter(buyAGiftAdapterFastItemAdapter);
stickers();
}
private void stickers() {
stickerarray.clear();
OkHttpClient stickerclient = new OkHttpClient();
Request stickerrequets = new Request.Builder().url(Constant.url + "gifts&facebook_id=" + Session.getUserID(getActivity())).build();
final int position = getArguments().getInt("position", 1);
stickerclient.newCall(stickerrequets).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Constant.l(e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
JSONObject startobj = new JSONObject(response.body().string());
JSONObject giftobj = startobj.getJSONObject("giftcategories");
JSONArray giftarray = giftobj.getJSONArray("giftmenu");
JSONObject giftobjposition = giftarray.getJSONObject(position);
JSONArray stickerarrayobj = giftobjposition.getJSONArray("gifts");
for (int j = 0; j < stickerarrayobj.length(); j++) {
JSONObject stickergiftimg = stickerarrayobj.getJSONObject(j);
StickerImage_Icon stickerImage = new StickerImage_Icon();
stickerImage.setSticker_iconimage(stickergiftimg.getString("image"));
stickerarray.add(stickerImage);
}
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
buyAGiftAdapterFastItemAdapter.notifyDataSetChanged();
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
}
Fragmente Adapter
public class Buy_a_gift_adapter extends RecyclerView.Adapter<Buy_a_gift_adapter.Buyagift_viewholder> {
Context context;
ArrayList<StickerImage_Icon> stickerImages;
public Buy_a_gift_adapter(Context context, ArrayList<StickerImage_Icon> stickerImages) {
this.context = context;
this.stickerImages = stickerImages;
}
@Override
public Buyagift_viewholder onCreateViewHolder(ViewGroup parent, int viewType) {
View buyagiftview = LayoutInflater.from(context).inflate(R.layout.buy_a_gift_item, parent, false);
return new Buyagift_viewholder(buyagiftview);
}
@Override
public void onBindViewHolder(Buyagift_viewholder holder, int position) {
StickerImage_Icon stickerImage = stickerImages.get(position);
Glide.with(context).load(stickerImage.getSticker_iconimage()).into(holder.buy_image);
}
@Override
public int getItemCount() {
return stickerImages.size();
}
public static class Buyagift_viewholder extends RecyclerView.ViewHolder {
@BindView(R.id.buy_image)
ImageView buy_image;
public Buyagift_viewholder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Constant.l("Clicked");
}
});
}
}
}
warum verwenden Sie runOnUiThread in OnResponse? – user3040153
Ich denke, weil wir Text oder Adapter auf dem Hauptthread ändern müssen –
onResponse funktioniert nur auf UI-Thread – user3040153